给定一个字符串s,找出最长的回文子串

思路1:

 1 从每一个回文对称点开始向左右遍历,直到左右字符不相等。求出最长子串。

2 考虑回文子串可能是奇数长度,对称点只有一个。也可能是偶数长度。对称点有俩个

代码:

string longestPalindrome(string s) {
        int len=s.length();
        string result="";
        if(len==0)
            return result;
        for(int i=0;i0&&rightresult.length()){
                result=s.substr(left,right-left+1);
            }
        }
        for(int i=0;i0&&rightresult.length()){
                    result=s.substr(left,right-left+1);
                }
            }
        }
        return result;
    }

思路2:

动态规划

 string longestPalindrome(string s) {
        int len=s.length();
        string result="";
        if(len==0)
            return result;
        int maxLen=0;
        int start=0;
        int end=0;
        vector> dp(len,vector(len,false));
        for(int j=0;jmaxLen){
                        maxLen=j-i+1;
                        start=i;
                        end=j;
                    }
                }
            }
        }
        return s.substr(start,end-start+1);
    }

思路3

遍历字符串,每次先查找相同的字符数量,然后下一个起始位置就是不相同的字符。

string longestPalindrome(string s) {
        int len=s.length();
        if(len==0)
            return "";
        int maxLen=1;
        int start=0;
        int left=0;
        int right=0;
        for(int i=0;imaxLen/2;){  
            left=i;
            right=i;
            while(right0&&s[left-1]==s[right+1]){
                right++;
                left--;
            }
            if(maxLen




你可能感兴趣的:(C++,leetcode,算法)