LeetCode 5.Longest Palindromic Substring

来源:互联网 发布:js new 数组 编辑:程序博客网 时间:2024/06/12 21:58

1. manacher算法 22ms

public class Solution {        private int min(int a, int b){            return a < b ? a : b;        }        public String longestPalindrome(String s) {            if (null == s || 0 == s.length()) {                return "";            }            int len = (s.length() << 1) + 1;            char[] srcString = new char[len];            for (int i = 0; i < len; i++) {                if (0 == i % 2) {                    srcString[i] = '~';                } else {                    srcString[i] = s.charAt(i >> 1);                }            }            int ansIdx = 0;            int mxIdx = 0;            int mx = 0;            int[] p = new int[len];            for (int i = 0; i < len; i++) {                if (mx < i) {                    p[i] = 1;                } else {                    p[i] = min(p[(mxIdx << 1) -i], mx - i);                }                while (len > i + p[i] && 0 <= i - p[i]) {                    if (srcString[i + p[i]] == srcString[i - p[i]]) {                        p[i]++;                    }else{                        break;                    }                }                if ( p[i] + i - 1 > mx){                    mx = p[i] + i - 1;                    mxIdx = i;                }                if (p[i] > p[ansIdx]){                    ansIdx = i;                }            }            int start = ansIdx + 1 - p[ansIdx];            int end = ansIdx + p[ansIdx] - 1;            return s.substring(start >> 1, end >> 1);        }    }
0 0
原创粉丝点击