• [leetcode] 5. Longest Palindromic Substring (Medium)


    原题链接


    找到并返回最长回路子串

    思路:
    解法一:
    最简单的双重遍历,判断s[i]到s[j]是不是回串。
    Runtime: 610 ms, faster than 6.39% of Java 慢的不行

    class Solution {
            public String longestPalindrome(String s) {
                int len=s.length();
                for (int i = 0; i < len; i++) {
                    int subNum = i + 1;
                    int subLen = len - i;
                    for (int j = 0; j < subNum; j++) {
                        String subStr = s.substring(j, j + subLen);
                        if (isPalindrome(subStr))
                            return subStr;
                    }
                }
                return "";
            }
    
            public boolean isPalindrome(String s){
                int beg = 0, end = s.length() - 1;
                while(beg<end){
                    if(s.charAt(beg)!=s.charAt(end))
                        return false;
                    beg++;
                    end--;
                }
                return true;
            }
        }
    

    解法二:
    遍历一次,以每一个s[i]为中心,计算。
    Runtime: 4 ms, faster than 100.00% of Java

    class Solution {
            int len = 0, maxLength = 0, start = 0;
    
            public String longestPalindrome(String s) {
                char[] arr = s.toCharArray();
                len = s.length();
                if (len <= 1)
                    return s;
                for (int i = 0; i < len; i++) {
                    i = helper(arr, i);
                }
                return s.substring(start, start + maxLength);
            }
    
            public int helper(char[] arr, int k) {
                int i = k - 1, j = k;
                while (j < len - 1 && arr[j] == arr[j + 1])
                    j++;
                int nextCenter = j++;
                while (i >= 0 && j < len && arr[i] == arr[j]) {
                    i--;
                    j++;
                }
                if (j - i - 1 > maxLength) {
                    maxLength = j - i - 1;
                    start = i + 1;
                }
                return nextCenter;
            }
    
        }
    
  • 相关阅读:
    初次使用github
    linux 如何显示一个文件的某几行
    ubuntu 2
    在html页中作跳转
    gmail邮箱 livemail 设置
    配置nginx与wordpress碰到的一个偱环重定向问题
    在nginx服务部署startbbs
    Attaching the script debugger to process *** failed on machine "***"
    linux查看文件夹大小
    linux 合并文件
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9939325.html
Copyright © 2020-2023  润新知