题解
1.判断整体是不是回文串
2.如果是,找第一个与 \(s_1\) 不同的字符 \(s_i\),如果 \(s[i+1,n]\) 是回文串,代表 \(s\) 一定长这样 \(AbAb....AbA\)
3.如果 \(A\) 的长度为一,或者 \(b\) 只出现一次,容易想到没有分割方法
4.不然可以 \(Abaaa...,...aaabAbAbA\)
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
void solve()
{
string s;
cin>>s;
int len=s.size();
int flag=0;
int it=len;
for(int i=0;i<len;i++)
{
if(s[i]!=s[len-i-1]) flag=1;
if(s[i]!=s[0])
{
it=min(it,i);
}
}
if(flag)
{
cout<<"YES\n1\n"<<s<<'\n';
return;
}
if(it==len)
{
cout<<"NO\n";
return;
}
flag=0;
for(int i=it+1;i<len;i++)
{
if(s[i]!=s[len-(i-it)]) flag=1;
}
if(flag)
{
cout<<"YES\n2\n"<<s.substr(0,it+1)<<" "<<s.substr(it+1)<<'\n';
}
else
{
if(it==1||2*it+1==len)
{
cout<<"NO\n";
}
else
{
cout<<"YES\n2\n"<<s.substr(0,it+2)<<" "<<s.substr(it+2)<<'\n';
}
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
标签:...,Palindromes,No,int,len,long
From: https://www.cnblogs.com/pure4knowledge/p/18309952