zoukankan      html  css  js  c++  java
  • [LeetCode]5. Longest Palindromic Substring

    原题链接:https://leetcode.com/problems/longest-palindromic-substring/description/

    题目意思是给定字符串,要求找到最长的回文字符串。回文字符串就是正着读反着读都一样的字符串,如:“ababa”,“abba”这种

    怎么样找到回文字符串呢?我们注意到:回文字符串是两边对称的,不管是奇数还是偶数个字符,它都有中心点。

    如:“ababa”中心是第三个(str[2])字符‘a’;

    “abba”中心则为第二个字符(str[1])和第三个字符(str[2])之间。

    我们只要先选好中心点,然后像两个方向延伸直到不是回文字符串为止即可。

    所以对于给定的字符串,我们以它每个字符和字符间空隙为中心点找到最长的回文字符串,最后最长的那个就是输出结果。具体实现代码:

    class Solution {
    public:
        string expandAroundCenter(string s, int before, int after) {
            if (after == s.length())
                after--;
            
            while (before >= 0 && after <= s.length() - 1 && s[before] == s[after]) {
                before--;
                after++;
            }
            
            return s.substr(before + 1, after - before - 1);
        }
        
        string longestPalindrome(string s) {
            string sub_string, result;
            
            result = "";
            
            for (int i = 0; i < s.length(); i++) {
                sub_string = expandAroundCenter(s, i, i);
                if (sub_string.length() > result.length())
                    result = sub_string;
                
                sub_string = expandAroundCenter(s, i, i + 1);
                if (sub_string.length() > result.length())
                    result = sub_string;
            }
            
            return result;
        }
    };

    时间复杂度:O(n2​​).

    空间复杂度:O(m). m为最长回文字符串的字符个数

    总结:回文字符串特点,奇数和偶数个字符中心的处理。

  • 相关阅读:
    C++的Socket的使用源码
    一些程序技术简介
    VMware安装步骤既常见问题
    操作系统和环境准备
    第一章-硬件组成
    python之面向对象
    指向方法之委托(一)
    Django之URL控制器(路由层)
    python之字符编码(四)
    python之字符编码(三)
  • 原文地址:https://www.cnblogs.com/qianzixuan1996/p/8288240.html
Copyright © 2011-2022 走看看