题解 | #最长回文子串#

最长回文子串

https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

//记录一下我的绞尽脑汁
#include <cmath>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    bool isPalindrome(string s){
        int size = s.size();
        int pos = int(size/2), start;
        if(size%2==0)
            start = pos;
        else
            start = pos+1;
        string front = s.substr(0, pos), back = s.substr(start, pos);
        string tmp(back.rbegin(), back.rend());
        if(front == tmp)
            return true;
        return false;
    }
    int getLongestPalindrome(string A) {
        // write code here
        map<string, int> storage;
        int size = A.size();
        if(size == 1)
            return 1;
        else if(size==2){
            if(A[0] == A[1])
                return 2;
            else
                return 1;
        }
        for(int i = 0;i<size;i++){
            for(int pos = 2;pos<=size&&i+pos<=size;pos++){
                string tmp = A.substr(i, pos);
                storage[tmp]++;
            }
        }
        vector<string> res;
        for(auto it:storage)
            if(isPalindrome(it.first))
                res.push_back(it.first);
        int mx = res[0].size();
        for(int i = 1;i<res.size();i++)
            mx = (mx>=res[i].size())?mx:res[i].size();
        return mx;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务