D1 - Prefix-Suffix Palindrome (Easy version)
题意:
给一个全小写字母的字符串
s
s
s,取不相交的前缀和后缀(前缀后缀可以是空串)构成最长回文串。
思路:
此题是简单版本,数据小,确保所有测试用例的字符串长度总和不超过
5000
5000
5000。
先取左右两侧的对称的前后缀,再取余下字符串中较长的回文前缀或回文后缀。
Code:
#include <bits/stdc++.h>
using namespace std;
bool check(string &s, int l, int r)
{
while (l <= r && s[l] == s[r])
l++, r--;
return r < l;
}
int main()
{
int T;
cin >> T;
while (T--)
{
string s;
cin >> s;
int l = 0, r = s.length() - 1;
while (l < r && s[l] == s[r])
l++, r--;
int l2, r2;
for (l2 = l; l2 <= r; l2++)
if (check(s, l2, r))
break;
for (r2 = r; r2 >= l; r2--)
if (check(s, l, r2))
break;
cout << s.substr(0, l)
<< (r - l2 > r2 - l ? s.substr(l2, r - l2 + 1) : s.substr(l, r2 - l + 1))
<< s.substr(r + 1) << endl;
}
return 0;
}