回文子串,中心扩展法最易记忆也容易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); } }