前言
新的一年,好好学习。
正文
问题来源
本问题来自leetcode上的647题。
问题描述
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
分析:
func countSubstrings(s string) int {
ans := 0
for i := 0; i < len(s); i++ {
for j := 0; (i-j>=0)&&(i+j<len(s))&&(s[i-j]==s[i+j]); j++ {
ans++
}
for j := 0; (i-j-1>=0)&&(i+j<len(s))&&(s[i-j-1]==s[i+j]); j++ {
ans++
}
}
return ans
}
func countSubstrings(s string) int {
res := 0
ls := 2*len(s)-1
for i := 0; i < ls; i++ {
l, r := i/2, i/2+i%2
for l >= 0 && r < len(s) && s[l] == s[r] {
l--
r++
res++
}
}
return res
}
总结:
勤思考。
结语
不管怎么样好好加油。