String 回文字串manacher演算法

2021-07-11 19:40:31 字數 740 閱讀 4718

資料**網路 參見

找字串中的最大回文子串

演算法基本要點:

首先用乙個非常巧妙的方式,將所有可能的奇數/偶數長度的回文子串都轉換成了奇數長度:在每個字元的兩邊都插入乙個特殊的符號。比如 abba 變成 #a#b#b#a#, aba變成 #a#b#a#。然後就可以運用manacher演算法。

public class solution 

}//找出p[i]中最大的;

int max=0;

int index=0;

for(int j=0;jmax)

}//如#a#b#b#a#,

//對應的p[i]為021252121,start和end為該回文子串起始和終止的地方,

//index == 4,max == 5,可簡單的觀測出start和end與max和index對應關係;

max=max-1;

int start=index-max;

int end=index+max;

stringbuilder sb=new stringbuilder();

for(int k=start;k<=end;k++)

string string =sb.tostring();

return string;}}

回文字串

描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在 要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。輸入第一行給出整數n 0思路分析 1.判斷字串前後倆個字元...

回文字串

還是在龐果網 看到的題目,這次選了個簡單的,回文字串。題目內容 回文字串是指從左到右和從右到左相同的字串,現給定乙個僅由小寫字母組成的字串,你可以把它的字母重新排列,以形成不同的回文字串。思路 不滿足上面條件的直接返回0,因為這樣構不成回文 判斷出能形成回文以後,將元素減半,在字串一半的長度內進行組...

回文字串

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文...