• LeetCode 5——最长回文子串


    1. 题目

    2. 解答

    我们定义状态 state[i][j] 表示子串 s[i, j] 是否为回文子串,如果 s[i, j] 为回文子串,并且有 s[i-1] == s[j+1],那么 s[i-1, j+1] 也为回文子串。状态转移方程为:

    [state[i][j] = 1 space 如果 space i = j ]

    [state[i][j] = egin{cases} state[i+1][j-1] & ext{如果 } s[i] == s[j] \ 0 & ext{如果 } s[i] != s[j] end{cases}]

    注意我们需要自底向上更新状态,首先是长度为 1 的子串,再然后是长度为 2 的,一直递增下去。

    string longestPalindrome(string s) {
    
        int n = s.size();
        if (n == 0) return s;
        
        vector<bool> temp(n, true);
        vector< vector<bool>> state(n, temp);
        int max_len = 1;
        int begin = 0;
        int end = 0;
        // 坐标差从 1 开始,也即长度为 2
        for (int len = 1; len < n; len++)
        {
            for (int i = 0; i < n-len; i++)
            {
                int j = i + len;
                if (s[i] == s[j])
                    state[i][j] = state[i+1][j-1];
                else    state[i][j] = false;
                
                if (state[i][j])
                {
                    if (j - i + 1 > max_len)
                    {
                        max_len = j - i + 1;
                        begin = i;
                        end = j;
                    }
                }
            }
        }
        string ret(s.begin()+begin, s.begin()+end+1);
        return ret;
    }
    

    获取更多精彩,请关注「seniusen」!

  • 相关阅读:
    JSP/Servlet相关
    mysql 相关问题解决
    Git常用
    利用JDBC连接MySQL并使用MySQL
    memcache、redis原理对比
    Python 2.7.x 和 3.x 版本的重要区别
    python 单例模式
    python 装饰器原理及用法
    python 冒泡排序
    python 迭代器和生成器
  • 原文地址:https://www.cnblogs.com/seniusen/p/11991121.html
Copyright © 2020-2023  润新知