美文网首页
647. 回文子串

647. 回文子串

作者: 名字是乱打的 | 来源:发表于2022-01-04 00:27 被阅读0次

一 题目:

二 思路:

动态规划法

  • 状态:dp[i][j] 表示字符串s在[i,j]区间的子串是否是一个回文串。
    状态转移方程:当 s[i] == s[j] && (j - i < 2 || dp[i + 1][j - 1]) 时,dp[i][j]=true,否则为false
    这个状态转移方程是什么意思呢?
  • 当只有一个字符时,比如 a 自然是一个回文串。
  • 当有两个字符时,如果是相等的,比如 aa,也是一个回文串。
  • 当有三个及以上字符时,比如 ababa 这个字符记作串 1,把两边的 a 去掉,也就是 bab 记作串 2,可以看出只要串2是一个回文串,那么左右各多了一个 a 的串 1 必定也是回文串。所以当 s[i]==s[j] 时,自然要看 dp[i+1][j-1] 是不是一个回文串。

三 代码:

class Solution {
    public int countSubstrings(String s) {
        int len = s.length();
        int res=0;
        //如dp[i][j]存储i~j是否是回文字符串
        boolean [][] dp=new boolean[len][len];

        for (int j = 0; j < len; j++) {
            for (int i = 0; i <= j; i++) {
                if (s.charAt(i)==s.charAt(j)&&(j-i<2||dp[i+1][j-1])){
                    dp[i][j]=true;
                    res++;
                }
            }
        }
        return res;
    }
}

也可以用中心法。这个我之前写过,可以参考参考https://www.jianshu.com/p/e8b25fbb7aa9

相关文章

  • # 647. 回文子串(647. Palindromic Sub

    题目地址:647. 回文子串Given a string, your task is to count how m...

  • 两道回文子串的解法

    两道题分别是:leetcode 5. 最长回文子串 和 647. 回文子串 先看647题 找到一个字符串中所有的回...

  • Leetcode每日一题(5)

    647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串...

  • 647.回文子串

    647.回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即...

  • 647. 回文子串

    思路:直接暴力来列举出所有的回文中心,然后一个一个的去判断是不是能构成回文串判断索引为left和right的值是不...

  • 647. 回文子串

    给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组...

  • 647. 回文子串

    这道题目和求解最长回文子串的题目是一样的框架结构, 不同的地方在于这到题目统计的是总数.

  • 647. 回文子串

    解法 动态规划解法 中心扩展思想

  • 647. 回文子串

    一 题目: 二 思路: 动态规划法 状态:dp[i][j] 表示字符串s在[i,j]区间的子串是否是一个回文串。状...

  • 647. 回文子串(Python)

    题目 难度:★★★☆☆类型:数组方法:动态规划 力扣链接请移步本题传送门[https://leetcode-cn....

网友评论

      本文标题:647. 回文子串

      本文链接:https://www.haomeiwen.com/subject/rxafcrtx.html