【天梯赛】L2-008 最长对称字串(C++)
L2-008 最长对称子串 - 团体程序设计天梯赛-练习集
解题反思
//防惯性:长度的最小值不是0,而是1!
对称问题不止可以用stack!从一点出发初步判断(与后一个相同或者后面第二个相同,则由此向两边展开继续判断)
代码实现
//防惯性:长度的最小值不是0,而是1!
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
getline(cin, str);
if(str.length() == 1)
{
cout<<"1"<<endl;
return 0;
}
int max_len = 1;
auto dfs = [&](auto& dfs, int fir_cur, int lst_cur, int pre_len) -> void{
if(str[fir_cur] == str[lst_cur]) pre_len+=2;
else return;
max_len = max(max_len, pre_len);
if(fir_cur-1>=0 && pre_len+1<str.length()) dfs(dfs, fir_cur-1, lst_cur+1, pre_len);
return;
};
for(int i=0; i<str.length(); i++)
{
if(i+1< str.length() && str[i] == str[i+1])
{
dfs(dfs, i, i+1, 0);
}
if(i+2< str.length() && str[i] == str[i+2])
{
dfs(dfs, i, i+2, 1);
}
}
cout<<max_len<<endl;
}