回文判断和是否包含回文的计算(java版本)
星期日, 2012-01-15 | Author: Lee | JAVA-and-J2EE | 4,534 views
这个是java版的计算回文的几种方式,基本上都算是比较高效的实现,
测试的最后的一个是判断一个字符串中是否位置重排后可以抽出回文的字符串来,当然字符串的长度和字数都不能有变,只是顺序随便排下而已:
这个是想到的快速的一种判断,还有一个是比较慢的就不贴了,如果你有更好的方法,希望回帖告知,也学习学习,源代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | package com.i5a6.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TestPalindrome { /** * @param args */ public static void main(String[] args) { String str = "11223344中国中国国"; // System.out.println(isPalindromeForLen(str)); // System.out.println(isPalindromeForStringBuf(str)); //System.out.println(isPalindromeForLenStringBuf(str)); System.out.println(isInnerPalindrome(str)); } /** * 检测是否字符串长度不变情况下的任意组合可以出回文的检测方法 (即是否包含回文的混排) * ex:"11223344中国中国国"----->"中国1234国4321国中" return true * 只是用2次循环1次排序,算是比较节省的 * @param str * @return */ private static boolean isInnerPalindrome(String str) { if (str == null || str.length() == 1) { return false; } int len = str.length(); List<Character> list = new ArrayList<Character>(); for (int i = 0; i < len; i++) { list.add(str.charAt(i)); } Collections.sort(list); int oddNum = 0; Character tempChar = null; int tempCnt = 0; for (int j = 0; j < len; j++) { char listC = list.get(j); boolean isChange = false; if (tempChar == null) { tempChar = listC; } if (tempChar.charValue() == listC) { tempCnt++; } else { if (tempCnt % 2 == 1) { oddNum++; } isChange = true; tempChar = listC; tempCnt = 1; } if ((j == (len - 1)) && (tempCnt % 2 == 1)) { oddNum++; } if ((isChange || (j == (len - 1))) && (oddNum > 1)) { return false; } } return true; } /** * 尾部倒序比较法 * * @param str * @return */ private static boolean isPalindromeForLenStringBuf(String str) { if (str == null || str.length() == 1) { return false; } int len = str.length(); StringBuffer sb = new StringBuffer(); for (int i = (len - 1); i >= 0; i--) { sb.append(str.charAt(i)); } return str.equals(sb.toString()); } /** * 循环长度校验 * * @param str * @return */ private static boolean isPalindromeForLen(String str) { if (str == null || str.length() == 1) { return false; } int len = str.length(); for (int i = 0; i < len / 2; i++) { char first = str.charAt(i); char end = str.charAt(len - i - 1); if (first != end) { return false; } } return true; } /** * 使用stringbuffer 检查是否为回文 * * @param str * @return */ private static boolean isPalindromeForStringBuf(String str) { if (str == null || str.length() == 1) { return false; } StringBuffer sb = new StringBuffer(str); String rvStr = sb.reverse().toString(); if (rvStr.equals(str)) { return true; } return false; } } |
文章作者: Lee
本文地址: https://www.pomelolee.com/875.html
除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址
No comments yet.
Leave a comment
Search
相关文章
热门文章
最新文章
文章分类
- ajax (10)
- algorithm-learn (3)
- Android (6)
- as (3)
- computer (85)
- Database (30)
- disucz (4)
- enterprise (1)
- erlang (2)
- flash (5)
- golang (3)
- html5 (18)
- ios (4)
- JAVA-and-J2EE (186)
- linux (143)
- mac (10)
- movie-music (11)
- pagemaker (36)
- php (50)
- spring-boot (2)
- Synology群晖 (2)
- Uncategorized (6)
- unity (1)
- webgame (15)
- wordpress (33)
- work-other (2)
- 低代码 (1)
- 体味生活 (40)
- 前端 (21)
- 大数据 (8)
- 游戏开发 (9)
- 爱上海 (19)
- 读书 (4)
- 软件 (3)