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

来源:互联网 发布:哈工大电力大数据 编辑:程序博客网 时间:2024/06/06 21:32

题目描述:

输入一个字符串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);    }}

输入输出如下:

abaabaaaaba5
阅读全文
0 0
原创粉丝点击