/*
* 給定一個字符串,返回這個字符串中有多少個回文子串。
兩個相同的回文子串出現在不同的位置,認為是2個回文子串。
a、aa、aaa、aba、aabaa、abcba均認為是回文子串。
輸入例子1:
"aaa"
輸出例子1:
6
例子說明1:
a、a、a、aa、aa、aaa
*
* */
public class HuiWenExercise {
public static void main(String[] args) {
String str = "aabba";
int count = countH(str);
System.out.println(count);
}
public static int countH(String str) {//動態規划解決
int sum = 0;
char[] array = str.toCharArray();
int size = str.length();
int[][] arr = new int[size][size];//用二維數組記錄回文情況
for (int i = 0; i < size; i++) {
arr[i][i] = 1;//長度為1的字串置1
sum++;
}
for (int i = 1; i < size; i++) {
int j = 0;
int k = j + i;
while (k < size) {
if (array[j] == array[k]) {
if (k - j > 1/*j+1<=k-1*/) {
arr[j][k] = arr[j + 1][k - 1];//長度大於2的子串調用之前記錄的數值
sum += arr[j + 1][k - 1];
} else {
arr[j][k] = 1;//長度小於等於2的子串置1
sum++;
}
}
j++;
k++;
}
}
return sum;
}
}