加密码字符要求输字符怎么输

 

求字符串中的最大回文最好的算法应该就是manacher算法了。

int max=0;//记录已经搜寻到的回文半径能到达右端的最达大值 int id=0;//记录回文半径能到达最有端的回文字符串的中心
用了一个比较笨嘚方法对于每一个字符,看他是不是与下一个字符相等(BAAB型)或者看他的上一个字符与下一个字符是否相等(ABA型),然后往回找就可鉯了
 
 
int maxRight = 0; //当前访问到的所有回文子串中所能触及的最右一个字符的位置 int*RL = new int[len]; //RL[i]记录以i为对称轴的最长回文子串半径长度(对称轴到最左或最右的距離) RL[i]++; //以i为中心,在上步的基础上扩展直至到达边界或左右字符不相等 //证明:新串中回文子串长度为2*RL[i]-1,其中RL[i]个 //插入字符则剩下的RL[i]-1个为原芓符

即最长回文子串问题,用动态规划做

设状态dp[j][i]表示索引j到索引i的子串是否是回文串,则易得状态转移方程如下:

动态规划耗时500ms左右,有超时的风险给出一个时间复杂度只有o(n)的方法,mancher法不懂原理的直接百度manacher法

中心扩展就是把给定的字符串的每一个字母当做中心,向两边擴展这样来找最长的子回文串。算法复杂度为O(N^2)

1、像aba,这样长度为奇数

2、想abba,这样长度为偶数

典型的求最长回文子串算法,有一个複杂度为O(n)的manacher算法专门解决这个问题。

//返回最大回文子串长度

//输入:原字符串数组指针

//返回值:最大回文子串

LeetCode上原题:用动态规划

//哃楼上一位答主一样,以每个字符(奇数长度的回文串)或者字符间空隙
//(偶数长度的回文串)分别向左向右扩充记录遇到的最大长度
 int max=1;//呮要字符创长度大于1,则最短的回文串长度为1
 //考虑奇数个数的回文串
 //现在考虑偶数回文串的情况主要考虑字符之间的位置

抄的,自己始終想不透这两行代码希望有人能给解释下,谢谢


          

        

对于我这种没学过算法的小白能做出来一题要用专业算法解决的题真的是很开心了。

借鉴了manacher算法程序第一部分是查找奇数回文串的(如aabaa),遍历每一个字符从当前字符向两端查找,字符相同则num计数加二ls记下每一个字苻对应的回文串长度(num+1),最终输出ls中最大值

第二部分是查找偶数回文串的(如bbaabb),遍历两个相同的字符串(如bb)向两端查找相同的芓符,字符相同则num计数加二ls记下每一个字符对应的回文串长度(num+2),最终输出ls中最大值





}

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

}

我要回帖

更多关于 密码字符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信