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
结果图:
作者:张九星
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。