给定一个字符串(数字或大小写字母), 找出最长的对称的子串(如有多个,输出任意一个)。
例如:
输入:“abbaad”
输出:“abba”
输入描述:
字符串
输出描述:
字符串
输入例子1:
a1223a
输出例子1:
22
这里是最长回文子串O(N^3)的穷举解法,要特别注意string的substr的两个参数分别是第一个字符串的位置,和长度。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool isPalindrome(string s) {
int left = 0, right = s.size() - 1;
while (left < right) {
if (s[left] != s[right])
return false;
left++;
right--;
}
return true;
}
int main()
{
string str;
cin >> str;
int res = 0;
int resStart, resEnd;
for (int i = 0; i < str.size(); i++) {
for (int j = i; j <= str.size(); j++) {
if (isPalindrome(str.substr(i, j-i))) {
if (j - i > res) {
res = j - i;
resStart = i;
resEnd = j;
}
}
}
}
cout << str.substr(resStart, resEnd-resStart) << endl;
}