文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
相关文章:
- LeetCode:55. Jump Game(跳远比赛)
- Leetcode:300. Longest Increasing Subsequence(最大增长序列)
- LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)
文章目录
题目:
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
示例 1:
输入:"abc"
输出:3
解释:三个回文子串: "a", "b", "c"
示例 2:
输入:"aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindromic-substrings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
java实现方法1:
int num = 0;
/**
* 统一个字符串的子字符串有多少回文串
*
* @param s 字符串
* @return 回文串个数
*/
public int countSubstrings(String s) {
for (int i = 0; i < s.length(); i++) {
count(s, i, i); //回文串长度为奇数
count(s, i, i + 1);//回文串长度为偶数
}
return num;
}
/**
* 子字符串判断是否是回文串
*
* @param s 子字符串
* @param start 开始
* @param end 结束
*/
public void count(String s, int start, int end) {
while (start >= 0 && end < s.length() && s.charAt(start) == s.charAt(end)) {
num++;
start--;
end++;
}
}
时间复杂度:O(n)
空间复杂度:O(n)
Python实现方式1:
def count_substrings(a: str) -> int:
'''
计算一个字符串中,它的子字符串包含多少回文串
Args:
a: 字符串
Returns:
子字符串个数
'''
global num
num = 0
for n in range(len(a)):
count_sub(a, n, n);
count_sub(a, n, n + 1);
return num
def count_sub(a: str, start: int, end: int):
'''
计算该字符串是不是回文串
Args:
a: 字符串
start: 开始位置
end: 结束位置
Returns:
None
'''
global num
while start >= 0 and end < len(a) and a[start] == a[end]:
start -= 1
end += 1
num += 1
时间复杂度:O(n)
空间复杂度:O(n)