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为最长回文字符串的字符个数

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

  • 相关阅读:
    Shiro基础
    Nginx+tomcat集群使用redis共享session
    小程序 wepy wx.createAnimation 向右滑动渐入渐出
    小程序util工具
    记错本~~
    小程序BindTap快速连续点击页面跳转多次
    微信小程序页面无法跳转
    CSS:font-family常用字体中英文对照
    git 常用指令
    js 获取数组重复的元素
  • 原文地址:https://www.cnblogs.com/qianzixuan1996/p/8288240.html
Copyright © 2011-2022 走看看