问题描述
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
注意:
输入的字符串长度不会超过1000。
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Solution{
public static void main(String[] args){
String str = "abc";
List<String> result = solution(str);
for(String s : result){
System.out.println(s);
}
}
public static List<String> solution(String str){
if(null == str || str.length() == 0){
return Collections.emptyList();
}
List<String> result = new ArrayList<String>();
for(int i = 0; i < str.length(); i++){
solution(str, result, i, i);
if(i < str.length() - 1){
solution(str, result, i, i + 1);
}
}
return result;
}
private static void solution(String str, List<String> result, int begin, int end){
while(begin >= 0 && end < str.length()){
if(str.charAt(begin) == str.charAt(end)){
result.add(str.substring(begin, end + 1));
begin--;
end++;
}else{
break;
}
}
}
}