647. 回文子串
1. 题目描述
来源: https://leetcode-cn.com/problems/palindromic-substrings/
2. 思路
2.1 中心拓展
对于s
中任何一个字符s[i]
,均有可能是一个回文子串的中心位置,因此可以以s[i]
为着手点,同时向两边发散,若左右两边的元素相同,则说明找到一个回文子串,回文子串数量加一。这是子串数量为奇数的情况,对于偶数个字符的子串,可以以两个连续字符s[i]
和s[i+1]
分别为向左和向右拓展的起始点向两边拓展。
代码(Java)
class Solution {
private int result = 0;
private void ext(String s, int n, int tl, int tr){
while(true){
if(tl>=0 && tr<n && s.charAt(tl)==s.charAt(tr)){
result++;
tl--;
tr++;
continue;
}
break;
}
}
public int countSubstrings(String s) {
int n = s.length();
for(int i = 0; i < n; i++){
// 2n
int ToLeft = i;
int ToRight = i+1;
ext(s, n, ToLeft, ToRight);
// 2n + 1
// ToLeft = i;
ToRight = i;
ext(s, n, ToLeft, ToRight);
}
return result;
}
}