求字符串中回文子串的數量(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;

    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM