网易笔试题

/*给定一个字串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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值