647. 回文子串

暴力
func countSubstrings(s string) int {var res intfor i := 0; i < len(s); i++ {for j := i + 1; j <= len(s); j++ {if isPalindrome(s[i:j]) {res++}}}return res}func isPalindrome(s string) bool {l := 0r := len(s) - 1for l < r {if s[l] != s[r] {return false}l++r--}return true}

动态规划
func countSubstrings(s string) int {var res intflag := make([][]bool,len(s))for i:=range flag{flag[i]= make([]bool,len(s))}for j := 0; j < len(s); j++ {for i := j ; i >=0; i-- {if s[i] == s[j] && (j - i < 2 || flag[i + 1][j - 1]) {flag[i][j] = trueres++}}}return res}
abba
a
b
ba
b
bb
bba
a
ba
bba
abba
func countSubstrings(s string) int {if len(s) <= 1 {return len(s)}sLen := len(s)palindrome := make([][]bool, sLen)for i := 0; i < len(palindrome); i++ {palindrome[i] = make([]bool, sLen)}count := sLenfor i := sLen - 1; i >= 0; i-- {palindrome[i][i] = truefor j := i + 1; j < sLen; j++ {if s[i] == s[j] {if j == i+1 {palindrome[i][j] = true} else {palindrome[i][j] = palindrome[i+1][j-1]}}if palindrome[i][j] {count++}}}return count}。
