#记录学习
给你一个字符串 s
,找到 s
中最长的回文子串。
暴力算法(内存不够)猜测是因为传递s所以内存不够,还有调用啥的
class Solution {
public:
string longestPalindrome(string s) {
int len=s.size(),maxlen=1;
string maxstr;
if(s.size()==1){
return s;
}
//vector<vector<bool>> dp(len,vector<bool>(len,false));
maxstr= s.substr(1,1);
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
if(hui(i,j,s)){
if(maxlen<j-i+1){
maxstr = s.substr(i, j - i + 1);
maxlen=j-i+1;
}
}
}
}
return maxstr;
}
bool hui(int i,int j,string s){
for(;j>=i;){
if(s[i]!=s[j]){
return false;
}
i++;
j--;
if(j==i){return true;}
}
return true;
}
};
使用动态规划(时间复杂度好像差不多)
class Solution {
public:
string longestPalindrome(string s) {
int maxlen=0,begin=0;
string ans;
vector<vector<bool>> dp(s.size() + 1,
vector<bool>(s.size() + 1, false));
for (int i = 0; i < s.size(); i++)
dp[i][i] = true;
//i由i+1,j由j-1
for (int i = s.size()-1; i >= 0; i--) {
for (int j = i; j < s.size(); j++) {
if(s[i]==s[j]){
if(j-i<=2){dp[i][j]=true;}
else{dp[i][j]=dp[i+1][j-1];}
if(j-i+1>maxlen && dp[i][j]==true){
maxlen=j-i+1;
begin=i;
}
}
else{
dp[i][j]=false;
}
}
}
ans = s.substr(begin,maxlen);
return ans;
}
};