• 找出字符串中的最长的回文子串


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


    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 };
  • 相关阅读:
    解决SecureCRT中文显示乱码
    能大大提升工作效率和时间效率的9个重要习惯
    PHP基础知识
    CI学习相关地址
    IE8引入JavaScript
    IE9以下不支持placeholder属性
    IE8浏览器兼容性问题
    简单的DOS命令
    Linux常用运维指令
    log4j日志+面向切面监控异常
  • 原文地址:https://www.cnblogs.com/cofludy/p/6915448.html
Copyright © 2020-2023  润新知