Leetcode——647. Palindromic Substrings

题目原址

https://leetcode.com/problems/palindromic-substrings/description/

题目描述

Given a string, your task is to count how many palindromic substrings in this string.

The substrings 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”.

Example2:

Input: “aaa”
Output: 6
Explanation: Six palindromic strings: “a”, “a”, “a”, “aa”, “aa”, “aaa”.

Note:
The input string length won’t exceed 1000.

解题思路

该题目是希望找出一个字符串中所有可能出现的回文字符串的个数

  • 利用双层循环,从字符串的最后一个字符进行判断
    • 首先每个字符与本身构成回文,因此这种情况下回文个数+1
    • 当前字符与后面的各个字符进行比较,如果当前字符与后面的字符相等就说明可能是回文,但是这个条件还不足以判断它就一定是回文,需要再增加一个判断条件。如果两个字符相差距离为1或者2,那么一定是回文。因为相差1个说明两个字符相邻且相等,属于回文;相差2说明两个字符中间间隔一个字符,也属于回文。如果两个字符的距离大于3,但是如果两个字符中间的字符串是回文,那么这个字符串也是回文。
    • 最后判断dp数组是否为true,如果为真,则将字符串的回文个数+1

AC代码

class Solution {
    public int countSubstrings(String s) {
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        int res = 0 ;
        for(int i = n - 1; i >= 0; i--) {
            for(int j = i; j < n; j++) {
                dp[i][j] = (s.charAt(i) == s.charAt(j)) && (j - i < 3 || dp[i + 1][j - 1]);
                if(dp[i][j])
                    res++;
            }
        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值