假定你是李华。你不喜欢回文,所以你想把一个只包含小写字母的字符串 S 拆成若干个不是回文串的串。 具体地,对于一个长度为 n 的串 S(下标从 1 到 n),一组划分方案可以被描述成一个序列 a1,a2,...,am 使得 1≤a1<a2<...<am≤n+1,对于任意 1≤i<m,有 S[ai...ai+1−1] 不是回文串。 你需要判断是否有解,若有解输出任意一组合法的划分方案。
本题多组数据,第一行一个正整数 T 表示数据组数。 接下来 T 行,每行一个字符串 S 表示询问的字符串。
对于每组数据。若无解输出一行一个数 −1;否则输出两行,第一行一个正整数 m,然后第二行输出 m 个数 a1,a2,...,am。
我代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
bool a(const string&b)
{
int c=0,d=b.size()-1;
while(c<d)
{
if(b[c]!=b[d])return false;
c++,d--;
}
return true;
}
int main()
{
int e;
cin>>e;
while(e--)
{
string f;
cin>>f;
int g=f.size();
if(!a(f))
{
cout<<"2\n1 "<<g+1<<'\n';
continue;
}
bool h=false;
for(int i=1;i<g;++i)
{
string j=f.substr(0,i);
string k=f.substr(i,g-i);
if(!a(j)&&!a(k))
{
cout<<"3\n1 "<<i+1<<' '<<g+1<<'\n';
h=true;
break;
}
}
if(!h)cout<<"-1\n";
}
return 0;
}
TLE 4 个点