题解 | #牛群编号的回文顺序II#

牛群编号的回文顺序II

https://www.nowcoder.com/practice/e887280579bb4d91934378ea359f632e

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 将单链表读入 list 便于双指针遍历。
	 从 左向右 遍历,以当前节点为中心,双指针 pre 代表中心前的节点,tail 代表中心后的节点,如果 pre=中心节点,则 pre-1.比如 4 4 5,4 为中心,4 4 则为回文,如果 tail=中心节点则 tail+1,比如 4 5 5,5 为中心,5 5 为回文,如果 pre 和 tail 相等,则pre-1.tail+1,形态如 4 5 4,以此三个条件为基础向两边发散,不满足以上三个条件则不为回文,结束发散,tail-preh获得回文长度,与 count 相比较,如果比之前的回文长,则记录开始节点和结束节点,即 start=pre,end = tail。 最后判断若 start=end 代表没有回文,若 end-start = list.size()-1代表整个链表为回文,不满足这两个条件即存在回文,将 end 节点的下一个节点置空,返回start 节点即可。
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode maxPalindrome (ListNode head) {
        List<ListNode> list = new ArrayList<>();
        ListNode temp = head;
        while (temp != null) {
            list.add(temp);
            temp = temp.next;
        }
        int start = 0;
        int end = 0;
        int count = 0;
        for (int i = 0; i < list.size(); i++) {
            int pre = i;
            int tail = i;
            while (pre >=0 && tail < list.size()) {

                if (pre - 1 >= 0 && tail + 1 < list.size() &&
                        list.get(pre - 1).val == list.get(tail + 1).val) {
                    pre--;
                    tail++;

                } else if (tail + 1 < list.size() &&
                           list.get(tail + 1).val == list.get(i).val) {
                    tail++;
                } else if (pre - 1 >= 0 && list.get(pre - 1).val == list.get(i).val) {
                    pre--;
                } else {
                    break;
                }
            }
            if (count < tail - pre) {
                start = pre;
                end = tail;
            }
        }
        if (start != end && end - start != list.size() - 1) {
            list.get(end).next = null;
            return list.get(start);
        }
        return null;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务