給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
輸入: 「babad」看到一道題沒什麼思路,首推輸出: 「bab」
注意: 「aba」 也是乙個有效答案。
,無腦暴力,寫出來再說
public string longestpalindrome(string s)
}} return s.substring(bound[0], bound[1]);
中心法,遍歷字串,把每個字元當做中心,根據條件往兩邊擴,記錄最大值 奇數陣列好擴 「aba」 偶數陣列不好擴 「abba」,找不到中心,所以要變形
public string longestpalindrome_1(string s)
int index = 0;
s = sb.tostring();// 變形後
for (int i = 0; i != s.length(); i++)
} /*
* substring(a,b); 擷取字串上的距離,左閉右開 [a,b) replace(rex,"要替換的值"); 替換字串中某些字元
*/return s.substring(index - res, index + res + 1).replace("#", ""); }
public int caculatelong(string s, int i) else
break;
} return res;
}
,不用對s進行操作,遍歷到i時,考慮i是回文中心(奇數) [i,i+1]的中心為回文中心分別考慮這兩種情況,得到各自的回文長度,兩者中較大的則是當前i位置能求得的最大回文長度
無需擴充套件
public string longestpalindrome_2(string s)
int e = 0;
int start = 0;
for (int i = 0; i != s.length(); i++)
} return s.substring(start, e + 1);
}
時間複雜度為o(n2),空間複雜度為o(n^2),
public string longestpalindrome_3
(string s)if(
(i +1)
!= n && s.
charat
(i)== s.
charat
(i +1)
)}}// 陣列要從下往上填,因為dp[i][j] 根據 dp[i+1][j-1]來推
for(
int i = n -
2; i >=
0; i--)}
}}for(
int k =
0; k != n; k++)}
}return s.
substring
(start, end +1)
;}
/**
* created by huajianjin on 2019/10/17.
* 最長回文子串o(n)
*/public
class
manacher
return res;
}private
static
intmaxlcpslength
(string str)
else
break;}
// 若pos的回文長度大於當前最大右邊界,更新右邊界
if(pos + cpscnt[pos]
> rightbound)
// 若pos的回文長度大於之前求得最大回文長度,更新回文長度
if(cpscnt[pos]
> maxlength)
} maxlength--
;// string res = new string(chs).substring(maxcentre - maxlength, maxcentre + maxlength + 1).replace("#", "");
// system.out.println(res);
return maxlength;
}public
static
void
main
(string[
] args)
}
總結:對於陣列或者字串求子串的問題,注意不是子串行,這類題可以使用暴力法找到所有的子串,逐一比較,求得解,當然這種解法是不能通過oj的,複雜度太高。可以往動態規劃或者滑動視窗上面想。
leetcode 05 最長回文子串
leetcode題目鏈結 題目要求 求最長回文子串。這題 我的第一思路是 從頭對每乙個節點進行遍歷 以當前節點向兩邊擴充套件,一直記錄 更新當前的最大長度。但是 奇數,偶數回文的不確定性 的問題沒有解決 奇偶不同情況統一 如果是偶數個,傳入 個相鄰節點的下標 如果是奇數個,傳入的 個引數相同 參考部...
LeetCode05 最長回文陣列
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例2 輸入 cbbd 輸出 bb 在完成演算法的程式設計時,設計演算法是至關重要的,雖然來自數理系,但是自己在編寫演算法時還是不能設計出時間...
05最長回文子串
參考文獻 給定乙個字串s,找到s中最長的回文子串 example 輸入 babad return 輸出 bab aba 也是乙個有效答案中心擴充套件法 回文中心的兩側互為映象。因此,回文可以從他的中心展開,並且只有 2n 1 個這樣的中心 乙個元素為中心的情況有 n 個,兩個元素為中心的情況有 n ...