From c6760f0a68b4fa4b7eecc79ffab48f047fd7e556 Mon Sep 17 00:00:00 2001 From: ehlxr Date: Sat, 4 Jun 2022 14:34:28 +0800 Subject: [PATCH] longestPalindrome --- main.go | 30 ++++++++++++++++++------------ src/palindrome.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 src/palindrome.go diff --git a/main.go b/main.go index 0e07505..70385bc 100644 --- a/main.go +++ b/main.go @@ -1,22 +1,28 @@ package main import ( - "fmt" - . "github.com/ehlxr/leetcode-go/src" ) func main() { - node5 := &ListNode{Val: 5, Next: nil} - node4 := &ListNode{Val: 4, Next: node5} - node3 := &ListNode{Val: 3, Next: node4} - node2 := &ListNode{Val: 2, Next: node3} - node1 := &ListNode{Val: 1, Next: node2} - root := &ListNode{Val: 0, Next: node1} - - fmt.Printf("%v\n", root) - + // node5 := &ListNode{Val: 5, Next: nil} + // node4 := &ListNode{Val: 4, Next: node5} + // node3 := &ListNode{Val: 3, Next: node4} + // node2 := &ListNode{Val: 2, Next: node3} + // node1 := &ListNode{Val: 1, Next: node2} + // root := &ListNode{Val: 0, Next: node1} + // fmt.Printf("%v\n", root) + // // fmt.Printf("%v\n", Reverse(root)) - fmt.Printf("%v\n", ReverseRec(root)) + // fmt.Printf("%v\n", ReverseRec(root)) // fmt.Printf("%v\n", ReverseKGroup(root, 2)) + + // s := "Hello 你好" + // println(s[2], s[6]) + // rs := []rune(s) + // println(string(rs[6])) + + s := "babad" + println(LongestPalindrome(s)) + } diff --git a/src/palindrome.go b/src/palindrome.go new file mode 100644 index 0000000..b647ce3 --- /dev/null +++ b/src/palindrome.go @@ -0,0 +1,33 @@ +package src + +/* 给你一个字符串 s,找到 s 中最长的回文子串 */ +func LongestPalindrome(s string) string { + var res string + for i := 0; i < len(s); i++ { + // 回文串长度为奇数 + p1 := palindrome(s, i, i) + if len(p1) > len(res) { + res = p1 + } + + // 回文串长度为偶数 + p2 := palindrome(s, i, i+1) + if len(p2) > len(res) { + res = p2 + } + } + + return res +} + +// 从中心向两段扩展 +func palindrome(s string, l, r int) string { + for l >= 0 && r < len(s) && s[l] == s[r] { + l-- + r++ + } + + // (r-1)-l 为回文串的长度 + // s[l+1 : (r-1)-l+(l+1)] 为回文串 + return s[l+1 : r] +}