废话不多说了,直接给大家贴代码了,具体代码如下所述:
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
|
package com.gdh.backtext; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class BackText { String text; public BackText() { super (); this .text = null ; } public BackText(String text) { super (); this .text = text; } public boolean isBackText(){ for ( int i= 0 ,j=text.length()-i- 1 ;i<=j;i++,j--){ if ( text.charAt(i) != text.charAt(j) ){ return false ; } } return true ; } public Map<Character,Integer> countString(){ Map<Character,Integer> map= new HashMap<>(); int count= 0 ; String temp= new String(); for ( int i= 0 ;i< text.length();i++){ if ( temp.indexOf(text.charAt(i), 0 ) < 0 ){ temp+=text.charAt(i); } } map.clear(); for ( int i= 0 ;i< temp.length();i++){ if (!map.containsKey(temp.charAt(i))){ for ( int j= 0 ;j< text.length();j++){ if (text.charAt(j) == temp.charAt(i) ){ count++; } } map.put(temp.charAt(i), count); count= 0 ; } } //循环打印 for (Entry<Character,Integer> item:map.entrySet()){ System.out.println( "字符:" + item.getKey() + " 值:" + item.getValue()); } return map; } public String convert(){ int checksum = 0 ; int itemcount= 0 ; Map<Character,Integer> map=countString(); for (Entry<Character,Integer> item:map.entrySet()){ checksum+=item.getValue(); if ( item.getValue() % 2 != 0 ) itemcount++; } if ( itemcount > 1 ){ System.out.println( "该字符串不能转换为回文字" ); return null ; } StringBuffer temp= new StringBuffer(text); //线程安全 //StringBuilder temp=new StringBuilder();//线程非安全 int begIdx= 0 ; int endIdx=checksum- 1 ; Character key= null ; boolean flag= false ; for (Entry<Character,Integer> item:map.entrySet()){ if ( checksum % 2 == 0 ){ for ( int i= 0 ;i<item.getValue()/ 2 ;i++){ temp.setCharAt(begIdx++, item.getKey()); temp.setCharAt(endIdx--, item.getKey()); } } else { if (item.getValue()% 2 == 0 ){ for ( int i= 0 ;i<item.getValue()/ 2 ;i++){ temp.setCharAt(begIdx++, item.getKey()); temp.setCharAt(endIdx--, item.getKey()); } } else { key=item.getKey(); flag= true ; continue ; } } } if (flag) { for ( int i= 0 ;i<map.get(key);i++){ temp.setCharAt(begIdx++, key); } } return temp.toString(); } public static void main(String[] args) { BackText bt= new BackText( "1122334455667788990" ); if ( !bt.isBackText() ) System.out.println( "该字符串不是回文字" ); else System.out.println( "该字符串是回文字" ); String dest= new String(); System.out.println( "开始转换..." ); dest=bt.convert( ) ; System.out.print( "转换后的结果为:" ); System.out.println(dest); } } |
以上所述是小编给大家介绍的Java版本的回文字算法(java版本),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:http://www.cnblogs.com/gaodianhua/archive/2016/10/01/5925488.html