5. Longest Palindromic Substring
题目描述:
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input:
"babad"
Output: "bab"
Note: “aba” is also a valid answer. Example:
Input:
"cbbd"
Output: "bb"
知识补充
string类的函数
查找字符串函数
find_first_of();
find_first_not_of();
find_last_of();
find_last_not_of();
删除字符串函数
erase(pos,n);
erase(position);
erase(first,last);
截取字符串函数
s1.substr(i, ilen);
翻转字符串
reverse(s.begin(),s.end());
strrev(s);
测试代码
string longestPalindrome(string
s) {
string max_string =
"";
for(
int i=
0;i<
s.
length();i++){
int j =
s.
length()-
1;
while(i!=j){
if(
s[i]==
s[j]&&j-i+
1>max_string.
length()){
int pos = (j-i+
1)/
2;
string s1 =
s.
substr(i,
pos);
string s2 =
s.
substr(j-
pos+
1,
pos);
reverse(s2.begin(),s2.end());
if(s1==s2){
max_string =
s.
substr(i,j-i+
1);
}
}
j--;
}
}
if(!max_string.
length())
max_string =
s[
0];
return max_string;
}
性能
参考答案
string longestPalindrome(
string s) {
if (s.empty())
return "";
if (s.
size() ==
1)
return s;
int min_start =
0, max_len =
1;
for (
int i =
0; i < s.
size();) {
if (s.
size() - i <= max_len /
2)
break;
int j = i, k = i;
while (k < s.
size()-
1 && s[k+
1] == s[k]) ++k;
i = k+
1;
while (k < s.
size()-
1 && j >
0 && s[k +
1] == s[j -
1]) { ++k; --j; }
int new_len = k - j +
1;
if (new_len > max_len) { min_start = j; max_len = new_len; }
}
return s.substr(min_start, max_len);
}
性能