Longest Palindromic Substring(最长回文子字符串)

来源:互联网 发布:能玩dota2的笔记本知乎 编辑:程序博客网 时间:2024/05/17 07:35

什么是回文?就是正着的字符串和反着的字符串是一样的。比如“aba”,比如“owekkewo”。

这个算法在leetcode上判定时间过长,而没通过,先记录一下吧,后面想想怎么改善。

    public class Solution {        private Object object;        public String longestPalindrome(String s) {            String s1;            start = SystemClock.currentThreadTimeMillis();            if (s.isEmpty()) {                return null;            } else if (s.length() == 1) {                return s;            } else {                ArrayList<String> arrayList = new ArrayList<>();                for (int i = 0; i < s.length(); i++) {                    //从前往后,逐个字母                    String substring1 = s.substring(i, i + 1);                    for (int j = i + 1; j < s.length(); j++) {                        //从前往后,逐个字母                        String substring2 = s.substring(j, j + 1);                        //若有匹配,进入                        if (substring1.contentEquals(substring2)) {                            //原始子字符串                            String substring = s.substring(i, j + 1);//                            //子字符串的反转字符串//                            String reverse = process(s.substring(i, j + 1));                            if (process(s.substring(i, j + 1))) {                                //匹配子字符串的长度                                int length = substring.length();                                //如果arraylist是空的                                if (arrayList.isEmpty()) {                                    //保存                                    arrayList.add(substring);                                } else if (arrayList.get(0).length() <= substring.length()) {                                    arrayList.remove(0);                                    arrayList.add(substring);                                }                            }//                            //如果正反相等//                            if (reverse.contentEquals(substring)) {//                                //匹配子字符串的长度//                                int length = substring.length();////                                //如果arraylist是空的//                                if (arrayList.isEmpty()) {//                                    //保存//                                    arrayList.add(substring);//                                } else if (arrayList.get(0).length() <= substring.length()) {//                                    arrayList.remove(0);//                                    arrayList.add(substring);//                                }//                            }                        }                    }                }                if (arrayList.isEmpty()) {                    return s.substring(0, 1);                } else {                    return arrayList.get(0);                }            }        }        public boolean process(String subString) {            for (int i = subString.length(); i > 0; i--) {                String reverse = subString.substring(i - 1, i);                String negative = subString.substring(subString.length() - i, subString.length() - i + 1);                if (!negative.contentEquals(reverse)) {                    return false;                }            }            return true;        }    }
0 0