CC代码示例如何求解代码的最长回文

本文我们主要解决C/C++回文问题:对于一个字符串,设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。

比如:输入字符串"asdfgfdsa",我们计算出其最大回文长度为14.具体的代码及其注释如下:

intgetLongestPalindrome(StringA,intn){

//边界条件判断

if(n2)

returnA.length();//在输入字符串小于2的时候,也就是字符串本身就是回文,直接返回

//maxLen表示最长回文串的长度

intmaxLen=0;

for(inti=0;in;i++){

//如果剩余子串长度小于目前查找到的最长回文子串的长度,直接终止循环

//(因为即使他是回文子串,也不是最长的,所以直接终止循环,不再判断)

if(n-i=maxLen/2)

break;

intleft=i;

intright=i;

while(rightn-1A.at(right+1)==A.at(right))

++right;//过滤掉重复的

//下次在判断的时候从重复的下一个字符开始判断

i=right+1;

//然后往两边判断,找出回文子串的长度

while(rightn-1left0A.at(right+1)

==A.at(left-1))

{

++right;

--left;

}

//保留最长的

if(right-left+1maxLen){

maxLen=right-left+1;

}

}

//截取回文子串

returnmaxLen;

}

代码设计思路:对于该问题,如果所给出的字符串为空或者只有一个字符,那么该字符串的回文就是其本身,长度也是其本身的长度。

当字符串的个数大于等于2时,这个时候就需要根据实际条件求回文字符串最大长度了;我们定义一个整型变量maxlen并初始化为0表示回文的最大长度,当输入的字符串中有一个回文字符子串大学当前的maxlen时,则输入最大回文长度maxlen更新为当前的回文子串长度。

同时,通过定义整型变量right和left变量,初始化为零,其中的right变量不断往右移动,left往左移动,同时不断判断字符串在left和right的位置,如果字符串A在right+1的位置和left-1的位置对应值相等,也就是A.at(right+1)==A.at(left-1),则表示满足回文需求,right和left继续往相反方向移动,直至两者值不一样或者移动到头尾为止。

这里需要注意的一种情况是:如果声誉子串长度小于目前查找的最长回文子串的长度时,直接终止循环,因为即便这个时候剩下的字符串都是回文,其长度也是小于当前查找到的最长子串的。

代码示例

本次内容就分享到这里,希望大家喜欢。送人玫瑰,手有余香,期待您的点赞


转载请注明:http://www.aierlanlan.com/rzgz/3710.html