我們有一個字串str和一個二進位字串B。兩個字串的長度都等於N。我們需要檢查是否可以透過在字串B中包含不相等字符的任意索引對上多次交換其字符,使字串str成為回文字串。
1 |
|
1 |
|
我們可以交換str[1]和str[2],因為B[1]和B[2]不相等。最終的字串可以是'ASA'。
1 |
|
1 |
|
我們無法讓字串回文,因為字串B不包含不相等的字元。
1 |
|
1 |
|
由於字元頻率不匹配,我們無法使字串str成為回文。
在第一種方法中,我們將檢查是否可以使用字串str的所有字元建立任何回文字串。如果是,我們可以檢查是否可以交換字串B中包含不相等字符的索引對中的字符,並使字串成為回文。否則,我們回傳false。
步驟 1 - 執行 utility() 函數,根據給定條件交換字元來判斷字串是否可以透過交換字元成為回文。
第二步 - 定義canBePalindromic()函數來檢查我們是否可以使用str的字元來建構任何回文字串。
步驟 2.1 − 建立一個映射,用於儲存字串 str 中每個字元及其頻率。使用 for 迴圈遍歷字串並計算字元的頻率。
第2.2步 - 計算具有偶數和奇數頻率的字元數。
步驟 2.3 - 使用 set 來取得字串中唯一字元的總數。
步驟 2.4 − 如果字串長度為奇數並且只包含一個具有奇數頻率的字符,則傳回 true。
步驟 2.5 − 如果字串長度為偶數,則所有具有偶數頻率的字符,以及0個具有奇數頻率的字符,則傳回true。
步驟 2.6 − 傳回 false。
第三步 - 如果字串不能成為回文,回傳false。
第四步 - 如果字串B中包含多個'1'和'0',則傳回true;否則,傳回false。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
1 |
|
時間複雜度 - O(NlogN),因為我們使用for迴圈來遍歷字串,而set的insert()方法需要(logN)的時間。
空間複雜度 - O(K),其中K是唯一字元的總數。
在這種方法中,我們將使用一個陣列來儲存字元的頻率,而不是使用一個映射。
步驟 1 - 建立一個長度為26的'charFrequancy'數組,並初始化為零。
第二步 - 計算字串B中的1和0的總數。
第三步 - 更新陣列中每個字元的頻率。
第四步 - 如果字串長度為偶數且奇數頻率不為零,則傳回false。
步驟5 - 如果字串長度為奇數且奇數頻率大於1,則傳回false。
步驟 6 - 如果字串中同時存在 1 和 0,則傳回 true。
第7步 - 傳回 false。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
1 |
|
時間複雜度 - O(N),因為我們使用for迴圈來遍歷字串。
空間複雜度 − O(1),因為我們總是使用長度為26的陣列。
我們學習了兩種方法來檢查字串是否可以根據給定條件交換字元而成為回文。第一種方法使用集合和映射,而第二種方法僅使用陣列來儲存資料。第二種方法比第一種方法更好,因為insert()方法在集合中插入資料需要O(logn)的時間,而陣列只需要O(1)的時間。
以上是檢查一個字串是否可以透過交換二進位字串中具有不相等字元的索引處的字元對來形成回文字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!