题解 | #牛群编号的回文顺序II#
牛群编号的回文顺序II
https://www.nowcoder.com/practice/e887280579bb4d91934378ea359f632e?tpId=354&tqId=10595827&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode maxPalindrome (ListNode head) {
ListNode temp = head;
StringBuilder str = new StringBuilder();
while (temp != null) {
str.append(temp.val);
temp = temp.next;
}
boolean checkPalindrome = isPalindrome(str.toString(), 0, str.length() - 1);
if (checkPalindrome) {
return null;
}
ListNode cur = new ListNode(-1);
ListNode result = cur;
String s = longestPalindrome(str.toString());
for (int i = 0; i < s.length(); i++) {
ListNode node = new ListNode(s.charAt(i) - 48);
cur.next = node;
cur = cur.next;
}
return result.next;
}
/**
* 判断字符串是否为回文串
* @param s 字符串
* @param start 起始位置
* @param end 结束位置
* @return 字符串是否为回文串
*/
public boolean isPalindrome(String s, int start, int end) {
while (start < end) {
if (s.charAt(start) != s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
/**
* 找到连续最长的子回文串
* @param s 字符串
* @return 连续最长的子回文串
*/
public String longestPalindrome(String s) {
int maxLength = 1; // 最长回文串的长度
int start = 0; // 最长回文串的起始位置
for (int i = 0; i < s.length(); i++) {
for (int j = i + 1; j < s.length(); j++) {
// 如果子串是回文串并且长度大于当前最长回文串的长度,
// 更新最长回文串的长度和起始位置
if (isPalindrome(s, i, j) && j - i + 1 > maxLength) {
maxLength = j - i + 1;
start = i;
}
}
}
// 根据最长回文串的起始位置和长度截取子串并返回
return s.substring(start, start + maxLength);
}
}
本题知识点分析:
1.链表遍历
2.链表前驱结点和后继结点、虚拟头结点
3.字符串拼接StringBuilder单线程最快
4.字符串回文检测
5.连续最长回文子串(暴力O(n2))
6.Ascii码转数字(减48即可)
本题解题思路分析:
1.不在链表里面直接操作,先遍历一次链表将链表中的所有字符取出
2.第一次判断所有字符是否为回文,如果是,按照题目要求返回空链表,即null
3.调用功能函数,找出最长连续的回文子字符串,然后获取。
4.将找到的最长连续的回文子字符串拼接到一个新的链表上
5.返回虚拟头结点的next即可
6.我觉得此方法是最容易去做题的,但是时间复杂度至少是O(n2)
本题使用编程语言: Java
如果您觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~
高频面试算法题解 文章被收录于专栏
高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!


查看3道真题和解析