动态规划,找出所有的最长回文数

import java.util.Scanner;

class Solution {

    String zuichanghuiwen = " ";
    int zuichanghuiwen_len=0;//回文数长度
    int zuichanghuiwen_qishiwei=0;//回文数起始位
    StringBuffer buffer=new StringBuffer();//用于存储所有的回文数

    //判断字符串是否是回文
    public void find_huiwen(String s,int low, int high) {
        while(low>=0 && high<s.length()) {
            if(s.charAt(low)==s.charAt(high)) {
                if(zuichanghuiwen_len<=high-low+1) {
                    zuichanghuiwen_len=high-low+1;
                    zuichanghuiwen=s.substring(low, high+1);
                    zuichanghuiwen_qishiwei=low;
                    //System.out.println("打印中:"+zuichanghuiwen);
                    buffer.append(zuichanghuiwen).append(",");//将字符串中所有的回文数存储到buffer中
            }
                high++;
                low--;
            }else {
                break;
            }
        }
    }

//动态规划寻找回文数
    public String find_zuichanghuiwen(String s) {
        if(s==null||s.length()<=1) {
            System.out.println("无回文数");
            return s;
        }
            for (int i = 0; i < s.length(); i++) {
                find_huiwen(s, i, i);//奇回文串
                find_huiwen(s, i, i + 1);//偶回文串
            }
            if (zuichanghuiwen.length() == 1) {
                System.out.println("无回文数");
                return s;
            } else {
                System.out.println("最后一次出现的最长回文数为: "+zuichanghuiwen+
                        "  。最后一次出现的最长回文起始位:" + zuichanghuiwen_qishiwei +
                        " 。最长回文位数:" + zuichanghuiwen_len);
                return  s;
            }
    }
}


public class Test2 {

    public static void main(String[] args) {
        System.out.println("输入字符串");
        Scanner sc=new Scanner(System.in);//键盘输入字符串
        String s=sc.next().toString();
        Solution solution=new Solution();
        solution.find_zuichanghuiwen(s);
        System.out.println("buffer所有的回文数:"+solution.buffer);//输出所有回文串
        String buffer_str= solution.buffer.toString();
        String[] arr=buffer_str.split(",");

        //最后出来的回文数是最长的,所以对应的zuichanghuiwen_len最大
        // 只需要找长度相同的回文数,就可以打印出所有的最长回文数
        System.out.print("最长回文数有:");
        for(int i=0;i<arr.length;i++){
            if(arr[i].length()==solution.zuichanghuiwen_len){
                System.out.print(arr[i]+"  ");
            }
        }
        sc.close();
    }
}
发布了9 篇原创文章 · 获赞 2 · 访问量 322

猜你喜欢

转载自blog.csdn.net/qq_27103801/article/details/104803980