第一题的代码:
/**
* @author yishuai
* @version 1.0
* @description TODO
* @date 2021/9/14 20:09
*/
public class Demo01 {
int maxLength = 0, strLength = 0, maxLeft = 0;
public String longestPalindrome (String str) {
/**
* maxLength 是最大长度
* strLength 是字符串的长度
* maxLeft 是代表最大长度的left坐标
*/
if ("".equals(str)) {
return "";
}
strLength = str.length();
/*
头尾都可以忽略,因为头尾的最大值长度都是本身
但是如果最大长度是1的话,返回第一个数,所以头留着,尾去掉
*/
for (int i = 0; i <= strLength - 1; i++) {
getMaxLength(i, i, str);
getMaxLength(i, i + 1, str);
}
return str.substring(this.maxLeft, this.maxLength + this.maxLeft);
}
/**
* 统计当前字符的左右延伸的最长子串
*
* @param left
* @param right
*/
private void getMaxLength(int left, int right, String strTemp) {
while (left >= 0 && right < strTemp.length()) {
//如果两个值相等,就继续往两边扩散
if (strTemp.charAt(left) == strTemp.charAt(right)) {
left--;
right++;
} else {
break;
}
}
left++;
if (maxLength < right - left) {
maxLength = right - left;
maxLeft = left;
}
}
}
第二题的代码:
/**
* @author yishuai
* @version 1.0
* @description TODO
* @date 2021/9/14 20:40
*/
public class Demo02 {
public ListNode removeNthFromEnd (ListNode ListNode, int n) {
ListNode sentry = new ListNode(0);
sentry.next = ListNode;
/**
* pre为前驱节点
*/
ListNode fast = ListNode, pre = sentry;
for (int i = 0; i < n; i++) {
fast = fast.next;
}
while (fast != null){
fast = fast.next;
pre = pre.next;
}
pre.next = pre.next.next;
return sentry.next;
}
}
#涂鸦智能##笔经#