最长回文串,左右指针中心扩展
String longestStr(String s){
char[] chars = new char[s.length()];
String str = null;
for(int i=0;i<s.length(),i++){
chars[i] = s.charAt[i];
}
for(int i = 1;i<chars.length;i++){
str1=pilidrome(s,i,i);
str2=pilidrome(s,i,i+!);
str = str.length()>str1.length()?str:str1;
str = str.length()>str2.length()?str:str2;
}
retrun str;
}
String palindrome(String s, int l ,int r){
while(l>0 && r< s.length() && s[l] == s[r]){
l--;r++;
}
return s.substr(l+1,r-l-r);
}
判断是否为回文字符串
boolean isPalidrome(String s){
int left = 0; right =s.length()-1;
while(left<right){
if(s[left] != s[right]){
return false;
}
left++;right--;
}
return ture;
}
判断是不是回文链表,通过双指针可以找链表或者数组的中点
//通过双指针找链表的中点
ListNode slow, fast;
slow = fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
//从slow开始反转后面的链表,然后比较回文串
ListNode left = head;
ListNode right = reverse(slow);
while (right != null) {
if (left.val != right.val)
return false;
left = left.next;
right = right.next;
}
return true;
ListNode reverse(ListNode head) {
ListNode pre = null, cur = head;
while (cur != null) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}