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

結果圖:

 


免責聲明!

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



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