最長對稱字串php 專題系列 字串

2021-10-14 03:39:19 字數 2155 閱讀 4210

長度不相等直接返回false,然後用乙個雜湊表儲存即可,一開始初始化為0,然後遍歷s的時候加一,遍歷t的時候減一,這樣如果s和t的字元都是一樣的,雜湊表最後還是0,否則就不是字母異位詞。

這裡乙個點是,因為字元可以直接轉化為數字,所以可以直接做下標,之前我本來想用雜湊表的。。直接用陣列儲存會簡單很多。

class solution 

for(int i = 0; i < 26; i++)

return true;}};

回文串,長度如果是偶數,那所有字母都是成對出現,長度如果是奇數,那就再加上乙個單個字元作為對稱中心。所以就變成了統計有多少個成對出現的字母,以及如果有奇數出現的字母,就給回文串加上乙個對稱中心。

利用第乙個題的思路,就是利用雜湊表儲存,每個字元出現的次數,然後出現的偶數次都加到回文串的長度中,這裡有乙個需要注意的點是有大寫字母的存在,因為在儲存的時候就不再是26個雜湊長度,而是52個雜湊長度了。

class solution 

for(int i = 0; i < 52; i++)

return odds > 0 ? 1 + even : even; }};

用乙個map儲存s到t的對映,也就是map[s] = t,把s中的字元都換成雜湊表map[s]中的對應的t的字元,如果最後賦值完畢以後,s和t是一樣的,那就是同構的,否則就不是同構的。這裡有乙個需要注意的點是,這樣一次遍歷是s到t的對映,但是t到s的對映也需要考慮,否則下面這樣樣例就不可以通過

s = "ego",t = "add"

這裡我設定了乙個set來儲存t中已經被對映過的字元,如果是set中存在了當前的t[i],那就說明之前已經有s的字元和t[i]對應了,那這個肯定不是乙個同構的字元,就直接返回false就可以了。然後如果題目要求不可以改變s的話,就按照方法2,判斷map就好了,只是方法一的執行時間比較快一點。

方法一:改變s的值

class solution 

s[i] = temp[s[i]];

}if(s == t) return true;

return false;}};

方法二:不改變s的值

class solution else

}return true;}};

方法一:將數字轉化為字串,比較簡單粗暴

class solution 

return true;}};

方法二:

將數字的後面一半反轉,比較反轉後的數字和數字的前面部分是否相等。這裡需要考慮奇數和偶數,如果是長度是偶數,那比較簡單,就是相等那就是回文數,如果長度是奇數,那就前面的部分除以10以後,再與後面反轉的數字比較,相等就是回文數

但這裡要特判10的倍數,因為這裡如果後面一直是0的話,會出現lastnums一直是0的情況,就會一直小於x,直到x為0,這樣最後x和last_nnus就都是0,演算法就返回true,但是其實不是的。

class solution 

return x == last_nums || x == last_nums / 10;}};

// 0和1都是連續的,所以就從頭開始遍歷,計算某個字元0的個數,然後遇到另外乙個字元1的時候,儲存下上乙個的字元0的長度,之後1的字元長度開始計數,如果0的長度是大於1的長度,那子串的個數就加一,【就比如0001111這種情況,就有3個子串01,0011,000111這三個】

class solution 

if(prelen >= curlen) ret_num++;

}return ret_num;}};

中心法則,檢測回文子串是非常棒棒的解法了。懶得看dp了。。

class solution 

return ret;

}int countsubstrings2(string s, int left, int right)

return count;}};

最長對稱字串

對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定 is pat tap symmetric?最長對稱子串為 s pat tap s 於是你應該輸出11。輸入格式 輸入在一行中給出長度不超過1000的非空字串。輸出格式 在一行中輸出最長對稱子串的長度。輸入樣例 is pat tap symm...

求解字串中最長對稱字串長度

問題 輸入乙個字串,輸出該字串中對稱的子字串的最大長度。比如輸入字串 google 由於該字串裡最長的對稱子字串是 goog 因此輸出4。分析 暴力法,窮舉所有的子字串,然後判斷字串是否是對稱字串,如果是,則計算出長度和當前最長的字串比較,如果長度更長,更新結果。這種解法的時間複雜度為o n 2 o...

pta l2 8(最長對稱字串)

題意 求給定字串的最長回文串的長度。思路 資料太弱了,暴力就行了,遍歷0到len 1,當前點為i,則以i為中點的奇回文串是從i j到i j 1 j len 偶回文串從i j 1到i j,兩層迴圈。然後吐槽一下pta的題,題目說了輸入字串為非空,但有個測試點就卡了孔字串,需要輸出0,寫天梯賽的題還是多...