Live2D

求字符串中回文子串的数量(Java)

/*
*   给定一个字符串,返回这个字符串中有多少个回文子串。
    两个相同的回文子串出现在不同的位置,认为是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;

    }
}
posted @ 2021-01-17 21:00  细雪之舞0213  阅读(569)  评论(0)    收藏  举报