zoukankan      html  css  js  c++  java
  • 找出字符串中的最长的回文子串

    回文子串是指从前往后和从后往前一致的对称的字符串。这种字符窜分为,奇偶两种类型,在寻找回文字符串的时候,可以按照递归的方法寻找,即,如果首尾两个字符相同,则继续寻找下一层,直至只有一个字母或者没有字母为止,此时的字符串就是回文字符串。
    而,我们的程序目的是在一个字符串中, 找出,长度最长的回文字符串,可以按照上面的逆向思路来寻找,即,针对每一个字符,或者空格,寻找是否存在以其为中心的回文字符串。
    注意,这里分为奇和偶两种不同的情况。奇数时,回文字符串的中心是一个字符,偶数时,回文字符串的中心是一个空格。两种情况一块考虑即可
    我们的算法是,搜寻每一个空格和单字符,判断是否存在以其为中心的回文字符串。程序的主要代码如下:


    1
    class Solution { 2 public: 3 string longestPalindrome(string s) { 4 int maxLoc=0; 5 int maxNum=1; 6 const int stringSize=s.size(); 7 if(stringSize==1){ 8 return s; 9 } 10 11 for(int i=1; i!= 2*stringSize-1-1;++i){ 12 int a, b; 13 int num=1; 14 if(i%2==0){ //even 15 a=(int)(i-1)/2; 16 b=(int)(i+1)/2+1; 17 num=1; 18 } 19 else{ //old 20 a=(int)(i-1)/2; 21 b=(int)(i+1)/2; 22 num=0; 23 } 24 25 while(a>=0 && b<=stringSize){ 26 if(s[a] == s[b]){ 27 num=num+2; 28 a--; 29 b++; 30 } 31 else{ 32 break; 33 } 34 } 35 if(num>maxNum){ 36 maxNum=num; 37 maxLoc=i; 38 } 39 } 40 41 if(maxLoc%2==0){ 42 return s.substr(maxLoc/2-(maxNum-1)/2, maxNum); 43 } 44 else{ 45 return s.substr(maxLoc/2+1-maxNum/2, maxNum); 46 } 47 } 48 };
  • 相关阅读:
    spring属性的三种注入方法
    spring整合web项目原理
    IOC与DI区别
    近期的一些思考(前后台对接方面)
    关于form表单回车自动刷新
    css画心形、三角形的总结
    网页播放器与播放器定制
    css实现div内凹角样式
    20190614笔记(颜色透明度,css,filter,滤镜,计算属性,json和formData转换)
    关于注册页面的总结
  • 原文地址:https://www.cnblogs.com/cofludy/p/6915448.html
Copyright © 2011-2022 走看看