ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[Leetcode]647.Palindromic Substrings

2020-01-22 09:00:38  阅读:315  来源: 互联网

标签:子串 int res range Substrings 647 Leetcode dp 回文


链接:LeetCode647

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

示例 1:

输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:

输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".

相关标签:动态规划

一道明显的动态规划题。令dp[i][j]表示字符串索引i-j是否能组成回文,一共有三种情况:

  • 当i==j,此时为单个字符,必成回文
  • 当i==j-1,此时为两个字符,只需要判断这两个是否相同即可
  • 其他,此时采用动态规划,dp[i][j] = dp[i+1][j-1] & (s[i] == s[j])
    代码如下:

python:

class Solution:
    def countSubstrings(self, s: str) -> int:
        res = 0
        if not s:
            return res
        n = len(s)
        dp = [[False for j in range(n)] for i in range(n)]
        for i in reversed(range(n)):
            for j in range(i,n):
                if i == j:
                    dp[i][j] = True
                elif i == j-1:
                    dp[i][j] = (s[i] == s[j])
                elif s[i] == s[j]:
                    dp[i][j] = dp[i+1][j-1]
                if dp[i][j]:
                    res += 1
        return res

C++:

class Solution {
public:
    int countSubstrings(string s) {
        if(s.empty()) return 0;
        int n = s.size(),res = 0;
        vector<vector<bool>> dp(n,vector<bool>(n));
        for (int i=n-1;i>=0;i--){
            for (int j=i;j<n;j++){
                dp[i][j] = (s[i] == s[j]) && (i==j || i==j-1 || dp[i+1][j-1]);
                if(dp[i][j]) ++ res;
            }
        }
        return res;
    }
};

标签:子串,int,res,range,Substrings,647,Leetcode,dp,回文
来源: https://www.cnblogs.com/hellojamest/p/12227865.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有