【题目描述】
给定一个字符串s,找到s中的最长回文子串(Longest Palindromic Substring,LPS);
若有多个结果,请输出字典序最小的LPS。
【输入格式】
一行,字符串s
【输出格式】
一行,表示最长回文子串
【数据范围】
对于100%的数据:1<=|s|<=5000,且s仅仅含有小写字母
【样例输入1】
baacaaba
【样例输出1】
baacaab
【样例解释1】
最长回文子串为baacaab
#include<iostream>
using namespace std;
#include <string>
bool IsReturnNumber(const string& str,int start,int end)
{
while(start < end)
{
if(str[start++] != str[end--])
return false;
}
return true;
}
string longestPalindrome(string s) {
string res;
res.push_back(s[0]);
int start = 0,end = s.length() - 1;
for(int i = 0;i < s.length();i++)
{
for(int j = i + 1;j < s.length();j++)
{
if(IsReturnNumber(s,i,j) )
{
if(j - i + 1 > res.length())
res = string(s.begin() + i, s.begin() + j + 1);
else if(j-i+1 == res.length())
{
string r = string(s.begin() + i, s.begin() + j + 1);
if(r<res)
res = r;
}
}
}
}
return res;
}
int main()
{
string s;
cin>>s;
cout<<longestPalindrome(s);
return 0;
}
#include <iostream>
#include <string.h>
#include <set>
using namespace std;
bool IsPalindromicStr(string str)
{
for (int i = 0; i < str.size() / 2; ++i)
{
if (str[i] != str[str.size() - 1 - i])
return false;
}
return true;
}
string countPalindromicSubstr(string str)
{
string s = "";
for (int i = 0; i < str.size(); i++)
{
for (int j = 1; j < str.size() + 1 - i; j++)
{
string substring = str.substr(i, j);
if (IsPalindromicStr(substring))
{
if (substring.length() > s.length())
{
s = substring;
}
else if (substring.length() == s.length())
{
s = substring.compare(s) == -1 ? substring : s;
}
}
}
}
return s;
}
int main()
{
string testStr;
cout << "Enter string: " << endl;
cin >> testStr;
cout << countPalindromicSubstr(testStr) << endl;
}