本文共 1146 字,大约阅读时间需要 3 分钟。
一般会给你一个序列,然后寻找里面最大或最小对称Plindrom(回文)。下面看一个例子:
class Solution { public String longestPalindrome(String s) { if (s == null || s.length() == 0) { return ""; }// 保存起始位置,测试了用数组似乎能比全局变量稍快一点 int[] range = new int[2]; char[] str = s.toCharArray(); for (int i = 0; i < s.length(); i++) {// 把回文看成中间的部分全是同一字符,左右部分相对称// 找到下一个与当前字符不同的字符 i = findLongest(str, i, range); } return s.substring(range[0], range[1] + 1); } public static int findLongest(char[] str, int low, int[] range) {// 查找中间部分 int high = low; while (high < str.length - 1 && str[high + 1] == str[low]) { high++; }// 定位中间部分的最后一个字符 int ans = high;// 从中间向左右扩散 while (low > 0 && high < str.length - 1 && str[low - 1] == str[high + 1]) { low--; high++; }// 记录最大长度 if (high - low > range[1] - range[0]) { range[0] = low; range[1] = high; } return ans; }}
**- 算法的核心思想是把每一个字符当成是中心,然后向两边扩展! 注明:本代码非本人所写!记本文以供学习**!
转载地址:http://pilzi.baihongyu.com/