/*给定一个字串X,求它最长字串S,使得S=SR,SR为S的反序,即如果S=abc,则SR=cba
例子:X=abccba,则输出S=abccba
*/
#pragma warning(disable: 4786)//VC6.0避免4786警告
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
bool isStrReverse(string str)
{
string strNotReverse(str);//保存str
reverse(str.begin(),str.end());//反转str
if(str.compare(strNotReverse) == 0)//判断反转前后字符串是否相等,相等返回true,否则返回false
return true;
else return false;
}
string StringReverse(string str)
{
string strRerv("");//保存满足条件的最长的字符串
int pos;
int max=0;
for(int i=0;i<str.length();i++)
{
pos=str.length();//每次内循环pos都指向字符串的最后一个字符
while(pos>i)
{
int temp = str.substr(i,pos).rfind(str[i]);//反向寻找与str[i]相等的字符,temp标记该字符所在位置
if(temp != string::npos)//如果存在相等字符
{
pos=temp;
string strsub(str.substr(i,pos+1));//取i与pos+1位置之间的子字符串
if((strsub.size()>1)&&isStrReverse(strsub))//如果子字符串长度大于1且子字符串满足题目S=SR的条件
if(max<strsub.length())
{//则比较字符串是否是满足S=SR的最长的子字符串
max=strsub.length();
strRerv=strsub;//是则保存到strRerv中
}
--pos;
}
}
}
return strRerv;
}
int main()
{
string str("abaabaabaaba");
string strRerv;
strRerv=StringReverse(str);
cout<<strRerv<<endl;
return 0;
}
网易笔试题
最新推荐文章于 2022-08-24 01:46:51 发布