一个字符串包含的所有回文串

题目描述:

输入一个字符串str,输出str包含的所有回文串的个数。如ABA,包含的回文串有A,B,A,AA,ABA共5个。

思路:
长度为N的str的不打乱原始顺序所有可能的字符子串个数为2^N个,再判定每一个子串是否是回文串。
感觉可以用动态规划,但是目前没有想到如何建模。

代码如下:

public class Main {

    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(numOfPalindrome(str));
    }

    public static int numOfPalindrome(String str) {
        if (str == null || str.length() == 0)
            return 0;
        int N = str.length(), i = 1, num = 0, j = 0, flag = 1;
        StringBuffer sb = null;
        while (i < (int) Math.pow(2, N)) {
            j = 0;
            flag = 1;
            sb = new StringBuffer();
            while (j < N) {
                if ((i & flag) != 0)
                    sb.append(str.charAt(j));
                j++;
                flag = flag << 1;
            }
            if (isPalindrome(sb, 0, sb.length() - 1)) {
                System.out.println(sb);
                num++;
            }
            i++;
        }
        return num;
    }

    public static boolean isPalindrome(StringBuffer sb, int start, int end) {
        while (start <= end && sb.charAt(start) == sb.charAt(end)) {
            start++;
            end--;
        }
        return (start > end);
    }
}

输入输出如下:

aba
a
b
a
aa
aba
5

你可能感兴趣的:(数据结构与算法)