题目原址
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;
}
}