golangfunc longestPalindrome(s string) string {
if len(s) < 2 {
return s
}
start,end :=0,0
expand := func(left, right int) (int, int){
for left >= 0 && right < len(s) && s[left]== s[right]{
left--
right++
}
return left + 1, right - 1
}
for i:=0;i < len(s);i++ {
left1,right1 := expand(i,i)
left2,right2 := expand(i,i+1)
if right1 - left1 > end - start {
start,end = left1, right1
}
if right2 - left2 > end - start {
start,end = left2, right2
}
}
return s[start:end+1]
}
golang/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func isPalindrome(head *ListNode) bool {
if head == nil || head.Next == nil {
return true
}
slow, fast := head, head
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
}
tail := reverse(slow)
p1, p2 := head, tail
for p2 != nil {
if p1.Val != p2.Val {
return false
}
p1 = p1.Next
p2 = p2.Next
}
return true
}
func reverse(head *ListNode) *ListNode {
var prev *ListNode
curr := head
for curr != nil {
next := curr.Next
curr.Next = prev
prev = curr
curr = next
}
return prev
}
本文作者:曹子昂
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!