Golang 有关于回文的算法

  1. 从一个字符串中找出最长回文子串
func longestPalindrome(s string) string {
    finalStr := ""
    lens := len(s)
    lastLen := 0
    for i := 0; i < lens; i++ {
        for j := i; j < lens; j++ {
            substr := s[i:j+1]
            if isPalind(substr) {
                if j - i + 1 > lastLen {
                    finalStr = substr
                    lastLen = j - i + 1
                }
            }
        }
    }
    return finalStr
}

func isPalindrome(s string) bool {
    lens := len(s)
    i, j := 0, lens - 1
    for ;i < j; {
        if (s[i] != s[j]) {
            return false
        }
        i++
        j--
    }
    return true
}
  1. 给出一个字符串,在前方补充字符使其成为最短的回文字符串
func shortestPalindrome(s string) string {
    lens := len(s)
    long := 0
    for j := 0; j < lens; j++ {
        substr := s[0:j+1]
        if isPalind(substr) {
            if j + 1 > long {
                long = j + 1
            }
        }
    }
    head := ""
    for i := lens - 1; i >= long; i-- {
        head += string(s[i])
    }
    return head + s
}

func isPalindrome(s string) bool {
    lens := len(s)
    i, j := 0, lens - 1
    for ;i < j; {
        if (s[i] != s[j]) {
            return false
        }
        i++
        j--
    }
    return true
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注