给你一个字符串 s,找到 s 中最长的回文子串。
鬼知道我改了多少次,大部分提交失败都是超出时间限制,改的我都快怀疑人生了。
简单的说一下我的思路吧:
首先什么是回文子串:就是一段字符串你正着读和到着读都是一样的。如:qjkjq
然后讲一下思路:无非就是遍历,一个个比较,两个for循环是最基本了。然后找到了相同的字符,就做一个比较,看一下是不是回文字符串。这也是回文字符串的一特点:首尾的字符一定是相同的
#include <iostream>
#include <cstring>
#include <vector>
#include <string>
class Solution {
public:
string longestPalindrome(string s) {
int maxLen = 0;
int len = (int)s.length();
string _str = "\0";
string str = s.data();
for (int i = 0; i < len; ++i)
{
if(_str.length() == 0)
{
_str = str[i];
}
char _str1 = str[i];
for (int j = i + 1; j < len; ++j)
{
char _str2 = str[j];
int lenC = (int)_str.length();
if(_str1 == _str2 && lenC < j-i+1)
{
int idx = 0;
for (int h = i; h < j+1; ++h)
{
if(str[h] == str[j-idx])
{
idx = idx + 1;
}else {
break;
}
}
if(idx == j-i+1 && idx > maxLen)
{
maxLen = idx;
_str = s.substr(i,j-i+1);
}
}
}
}
s = _str;
return s;
}
};
// 输入:s = "babad" aca aacabdkacaa
// 输出:"bab"
// 解释:"aba" 同样是符合题意的答案。
int main(int argc, char const *argv[])
{
string str = "uwqrvqslistiezghcxaocjbhtktayupazvowjrgexqobeymperyxtfkchujjkeefmdngfabycqzlslocjqipkszmihaarekosdkwvsirzxpauzqgnftcuflzyqwftwdeizwjhloqwkhevfovqwyvwcrosexhflkcudycvuelvvqlbzxoajisqgwgzhioomucfmkmyaqufqggimzpvggdohgxheielsqucemxrkmmagozxhvxlwvtbbcegkvvdrgkqszgajebbobxnossfrafglxvryhvyfcibfkgpbsorqprfujfgbmbctsenvbzcvypcjubsnjrjvyznbswqawodghmigdwgijfytxbgpxreyevuprpztmjejkaqyhppchuuytkdsteroptkouuvmkvejfunmawyuezxvxlrjulzdikvhgxajohpzrshrnngesarimyopgqydcmsaciegqlpqnclpwcjqmhtmtwwtbkmtnntdllqbyyhfxsjyhugnjbebtxeljytoxvqvrxygmtogndrhlcmbmgiueliyfkkcuypvvzkomjrfhuhhnfbxeuvssvvllgukdolffukzwqaimxkngnjnmsbvwkajyxqntsqjkjqvwxnlxwjfiaofejtjcveqstqhdzgqistxwsgrovvwgorjaoosremqbzllgbgrwtqdggxnyvkivlcvnv";
string s = Solution().longestPalindrome(str);
cout << s << endl;
return 0;
}