Java 判断回文字符串有多少和其中的最大字符串

Posted 爱萌妹的大叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 判断回文字符串有多少和其中的最大字符串相关的知识,希望对你有一定的参考价值。

一、简介代码功能

  该代码的功能可以实现对任意的一段字符串进行判断是否有回文,回文有哪些,和其中的最大回文。

二、代码部分

1、全局变量

1   static String hws = "";
2     static int num = 0;
3     static String[] hw;

2、创建数组用于保存回文

1   /**
2      * 创建数组保存所有的回文
3      * 
4      * @return 返回一个String类型的数组
5      */
6     public static String[] createHw() {
7         return new String[num];
8     }

3、将hws字符串更改为空字符

1     /**
2      * 将hws字符串更改为空字符
3      */
4     public static void hwsClose() {
5         hws = "";
6     }

4、判断该字符串中存在的回文的数量

 1     /**
 2      * 判断该字符串中存在的回文的数量
 3      * 
 4      * @param c
 5      *            数组c ,c是用户输入的字符串转换为单个字符组成的数组
 6      * @return
 7      */
 8 
 9     public static int judgeNumber(char[] c) {
10         for (int i = 0; i < c.length - 1; i++) {
11             if (c[i] == c[i + 1]) {
12                 num++;
13             }
14         }
15         return num;
16     }

5、第一次判断字符串中前后的数是否存在相同

 1     /**
 2      * 第一次判断字符串中前后的数是否存在相同
 3      * 
 4      * @param c
 5      *            数组c ,c是用户输入的字符串转换为单个字符组成的数组
 6      */
 7 
 8     public static void judge(char[] c) {
 9         judgeNumber(c);
10         if (num != 0) {
11             hw = createHw();
12             for (int i = 0; i < c.length - 1; i++) {
13                 if (c[i] == c[i + 1]) {
14                     hws = hws + c[i];
15                     judge2(c, i, i + 1);
16                     hw[--num] = hws;
17                     hwsClose();
18                 }
19             }
20         } else {
21             System.out.println("该字符串没有回文");
22         }
23     }

6、进行二次判断以当前相同的字符为起点,分别以前下标向前和该后下标向后进行比较()

 1   /**
 2      * 进行二次判断以当前相同的字符为起点,分别以前下标向前和该后下标向后进行比较()
 3      * 
 4      * @param c
 5      *            数组c ,c是用户输入的字符串转换为单个字符组成的数组
 6      * @param i
 7      *            数组前一个下标,该下标和后一个进行比较并且相同
 8      * @param k
 9      *            数组后一个下标,该下标和前一个进行比较并且相同
10      */
11 
12     public static void judge2(char[] c, int i, int k) {
13         if (i - 1 >= 0 && k + 1 < c.length) {
14             if (c[i - 1] == c[k + 1]) {
15                 hws = hws + c[i - 1];
16                 judge2(c, i - 1, k + 1);
17             }
18         }
19     }

7、输出所得的回文

 1   /**
 2      * 获取所得的回文
 3      * 
 4      * @param c
 5      *            数组c ,c是用户输入的字符串转换为单个字符组成的数组
 6      */
 7 
 8     public static void outPalindrome(char[] c) {
 9         judge(c);
10         if (hw!=null) {
11             for (int i = 0; i < hw.length; i++) {
12                 System.out.println(reverse(hw[i])+hw[i]);
13             }
14         } else {
15             System.out.println("没有回文2");
16         }
17     }

8、将最长的回文输出

 1   /**
 2      * 将最长的回文输出
 3      * 
 4      */
 5 
 6     public static void longestPalindromes() {
 7         String longest = null;
 8         if (hw!=null) {
 9             if (hw.length == 1) {
10                 System.out.println(reverse(hw[0])+hw[0]);
11             } else {
12                 for (int i = 0; i < hw.length - 1; i++) {
13                     for (int j = 0; j < hw.length - 1 - i; j++) {
14                         if (hw[j].length() > hw[j + 1].length()) {
15                             longest = hw[j + 1];
16                             hw[j + 1] = hw[j];
17                             hw[j] = longest;
18                         }
19                     }
20                 }
21                 for (int i = 0; i < hw.length - 1; i++) {
22                     if (hw[hw.length - 1].length() == hw[hw.length - i - 1].length()) {
23                         System.out.println(reverse(hw[hw.length - i - 1])+hw[hw.length - i - 1]);
24                     }
25                 }
26             }
27         } else {
28             System.out.println("没有回文3");
29         }
30     }

9、将字符串进行倒序

 1   /**
 2      * 将字符串进行倒序
 3      * @param string 将要被倒序的字符串
 4      * @return 返回倒序后的字符串
 5      */
 6     
 7     public static StringBuffer reverse(String string){
 8         StringBuffer sb=new StringBuffer();
 9         char a;
10         for(int i=0;i<string.length();i++){
11             a=string.charAt(string.length()-1-i);
12             sb.append(a);
13         }
14         return sb;
15     }

10、测试代码

 1 public static void main(String[] args) {
 2         @SuppressWarnings("resource")
 3         Scanner sc = new Scanner(System.in);
 4         String s = sc.next();
 5         char[] c = s.toCharArray();
 6         System.out.println("--------输出所有的回文------");
 7         outPalindrome(c);
 8         System.out.println("--------输出最长的回文------");
 9         longestPalindromes();
10   }

三、测试结果

1、输入数据:123

结果图:

2、输入数据:123321qwwqaartyuuytr1

结果图:

3、输入数据:123321qweewqasddsazxxzssgh31

结果图:

 

以上是关于Java 判断回文字符串有多少和其中的最大字符串的主要内容,如果未能解决你的问题,请参考以下文章

回文字符串 用英文怎么简写

怎样生成回文字符串

Java - 判断字符串是否是回文

#计算回文字符串最大长度模板题

Java 用递归判断字符串是否可以回文

leetcode.字符串.125验证回文串-Java