回文子串,中心扩展法最易记忆也容易code。
每次做到这类题目第一时间想的就是中心扩展,然后复习一遍动态规划和马拉车。
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
// Set<String> set = new HashSet<>();
int cnt = 0;
for(int i = 0; i < s.length(); i++){
//以 i为中心
{
int p = 1;
String temp = String.valueOf(s.charAt(i));
// set.add(temp);
cnt++;
while (i - p >= 0 && i + p < s.length() && s.charAt(i - p) == s.charAt(i + p)) {
temp = s.charAt(i - p) + temp + s.charAt(i + p);
// set.add(temp);
cnt++;
p++;
}
}
//以 i和i+1为对称
{
int q = 0;
String temp = "";
while (i - q >= 0 && i + q + 1 < s.length() && s.charAt(i - q) == s.charAt(i + q + 1)) {
temp = s.charAt(i - q) + temp + s.charAt(i + q + 1);
// set.add(temp);
cnt++;
q++;
}
}
}
// System.out.println(set.size());
System.out.println(cnt);
}
}

京公网安备 11010502036488号