题解 | 牛群编号的回文顺序II
牛群编号的回文顺序II
https://www.nowcoder.com/practice/e887280579bb4d91934378ea359f632e
- 会顺序表处理回文串,就能解决
import java.util.*; public class Solution { public ListNode maxPalindrome (ListNode head) { if (head == null || head.next == null) { return null; } StringBuilder sb = new StringBuilder(); ListNode cur = head; while (cur != null) { sb.append(cur.val); cur = cur.next; } final char[] chars = sb.toString().toCharArray(); int len = chars.length; int max = 1; int begin = 0; boolean[][] f = new boolean[len+1][len+1]; for (int j = 1; j < len; ++j) { f[j][j] = true; for (int i = j - 1; i >= 0; --i) { if (chars[i] != chars[j]) { continue; } f[i][j] = i == j - 1 ? true : f[i + 1][j - 1]; if (!f[i][j]) { continue; } final int ll = j - i + 1; if (ll > max) { max = ll; begin = i; } } } if (begin == 0 && max == len) { return null; } for (int i = 0; i < begin; ++i) { head = head.next; } ListNode tail = head; for (int i = 0; i < max - 1; ++i) { tail = tail.next; } tail.next = null; return head; } }