- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/palindromic-substrings/description/
Given a string, your task is to count how many palindromic substrings in this string.
Thesubstrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.
Example 1:
Input: "abc"
Output: 3
Explanation: Three palindromic strings: "a", "b", "c".
Example 2:
Input: "aaa"
Output: 6
Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".
Note:
1、 Theinputstringlengthwon'texceed1000.;
判断子字符串有多少个回文。
看到字符的长度只有1000,首先用暴力解法。双重循环,得到所有的子字符串,然后判断是不是回文。
时间复杂度基本是O(N^3),超过1%的提交。
代码:
class Solution(object):
def countSubstrings(self, s):
"""
:type s: str
:rtype: int
"""
count = 0
for i in xrange(len(s)):
for j in xrange(i, len(s)):
if s[i:j + 1] == s[i:j + 1][::-1]:
count += 1
return count
1 2 3 4 5 6 7 8 9 10 11 12
index从0到len进行遍历。对于每个单个的字符,其本身是一个回文。然后对回文长度是奇数的情况进行遍历:使用left和right双指针,往两边走,判断总长度是3,5,7……的子串是不是回文(left指针和right指针指向的字符相等)。再对回文是偶数的情况同样的进行遍历。最后求和即可。
比较巧妙的一种思想,不要怕代码长,其实没啥。
class Solution(object):
def countSubstrings(self, s):
"""
:type s: str
:rtype: int
"""
count = 0
for i in xrange(len(s)):
count += 1
回文长度是奇数的情况
left = i - 1
right = i + 1
while left >= 0 and right < len(s) and s[left] == s[right]:
count += 1
left -= 1
right += 1
回文长度是偶数的情况
left = i
right = i + 1
while left >= 0 and right < len(s) and s[left] == s[right]:
count += 1
left -= 1
right += 1
return count
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
动态规划的思想是,我们先确定所有的回文,即 string[start:end]
是回文. 当我们要确定string[i:j]
是不是回文的时候,要确定:
1、 string[i]
等于string[j]
吗?;
2、 string[i+1:j-1]
是回文吗?;
单个字符是回文;两个连续字符如果相等是回文;如果有3个以上的字符,需要两头相等并且去掉首尾之后依然是回文。
Python代码如下:
class Solution(object):
def countSubstrings(self, s):
"""
:type s: str
:rtype: int
"""
n = len(s)
count = 0
start, end, maxL = 0, 0, 0
dp = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(i):
dp[j][i] = (s[j] == s[i]) & ((i - j < 2) | dp[j + 1][i - 1])
if dp[j][i]:
count += 1
dp[i][i] = 1
count += 1
return count
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
二刷的Python代码如下:
class Solution(object):
def countSubstrings(self, s):
"""
:type s: str
:rtype: int
"""
count = 0
N = len(s)
dp = [[False] * N for _ in range(N)]
for l in range(1, N + 1): step size
for i in range(N - l + 1):
j = i + l - 1
if l == 1 or (l == 2 and s[i] == s[j]) or (l >= 3 and s[i] == s[j] and dp[i + 1][j - 1]):
dp[i][j] = True
count += 1
return count
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
C++代码如下:
class Solution {
public:
int countSubstrings(string s) {
const int N = s.size();
vector<vector<int>> dp(N, vector<int>(N, false));
int count = 0;
for (int l = 1; l <= N; l ++) {
for (int i = 0; i <= N - l; i ++) {
int j = i + l - 1;
if (l == 1 || (l == 2 && s[i] == s[j]) || (l >= 3 && s[i] == s[j] && dp[i + 1][j - 1])) {
count ++;
dp[i][j] = true;
}
}
}
return count;
}
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
**摘要:**下面就来给大家介绍这三个函数在字符截取时的一些用法与区别。 本文分享自华为云社区《GaussDB(DWS)中的字符截取三胞胎》,作者:我站在北方的天空下 。 在GaussDB(DWS)中
我对 JSTL 标记库前缀“fn”有疑问(Eclipse Luna 中的 webapp 开发)。 我的 taglibs.jspf 如下: 和 web.xml : *.
我正在使用转发器控件和数据绑定(bind)器将数据库中的数据显示到我的网站。示例:DataBinder.Eval(Container, "DataItem.title") 有时文字太长通常我使用 su
The second argument to substring is the index to stop at (but not include), but the second argument
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
假设我想返回一些 needle char 'x' 之后的所有字符,来自: $source_str = "Tuex helo babe". 通常我会这样做: if( ($x_pos = strpos($
谁能告诉我,Django 模板中是否存在 PHP 中的 substr ( http://pl2.php.net/manual/en/function.substr.php ) 之类的方法? 最佳答案
有什么区别 alert("abc".substr(0,2)); 和 alert("abc".substring(0,2)); 他们似乎都输出“ab”。 最佳答案 区别在于第二个参数。 substrin
我正在尝试编写一个函数,其中一列包含一个子字符串并且不包含另一个子字符串。 在下面的示例中,如果我的行包含“某些项目”并且不包含“开销”,我希望我的函数返回 1。 row| example strin
为什么这里 substr-rw 会切断尾随的 6? #!/usr/bin/env perl6 use v6; my $str = '123'; $str ~= '.' x 30; $str ~= '4
例子如下: a = "one two three four five six one three four seven two" m = re.search("one.*four", a) 我想要的是
来自 this question ,我们对这两个变体进行基准测试, substr( $foo, 0, 0 ) = "Hello "; substr( $foo, 0, 0, "Hello " ); 在
在我使用之前: entityManagerFactory.createQuery("select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1)
substring() 和 substr() 在 MySQL 中执行时给出相同的结果。那么,它们是一样的吗?其中哪一个应该优先于另一个? 最佳答案 没有区别。阅读 manual ! 关于mysql -
在我使用之前: entityManagerFactory.createQuery("select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1)
substring() 和 substr() 在 MySQL 中执行时给出相同的结果。那么,它们是一样的吗?其中哪一个应该优先于另一个? 最佳答案 没有区别。阅读 manual ! 关于mysql -
我的日期格式是这样的 2010-11-15 04:28:31 我只想选择 2010-11-15 而不是 2010-11-15 04:28:31 , 使用MYSQL查询, 从 TBL 中选择 SUBST
下面您可能会看到 xslt 代码来生成单选按钮。它适用于 Firefox 和 Opera,但不适用于 arora(使用 webkit 引擎)。简而言之,我没有尝试任何其他浏览器使用 webkit 引擎
我正在尝试向字符串中插入一个单词。为此,我使用 slice 函数,但它删除了我的空格。我还尝试了 substring 和 substr。我还查看了代码,它使用数组操作,我相信这就是问题所在。我能做什么
我是一名优秀的程序员,十分优秀!