题目:
分析:遍历将s1分成所有可能的左右两部分,将s2插进去,判断插入后是否回文串,注意i的最大取值是s1.size(),因此循环取等号
#include <iostream>
#include <string>
using namespace std;
//判断一个字符串是不是回文串
bool is_reverse(const string& s)
{
int left=0;
int right=s.size()-1;
while(left<right)
{
if(s[left]==s[right])
{
left++;
right--;
}
else
{
return false;
}
}
return true;
}
int main()
{
string s1;
string s2;
while(cin>>s1>>s2)
{
int count=0;
//注意,i最大到s1.size(),因为最多是从0开始的s1.size()这么长(即尾插)
for(int i=0;i<=s1.size();i++)
{
string left=s1.substr(0,i);//从下标从0开始的i个
string right=s1.substr(i);//从下标为i开始剩下所有的
left+=s2;
left+=right;
if(is_reverse(left))
{
count++;
}
}
cout<<count<<endl;
}
return 0;
}