poj1002_487-3279
简单的字符串处理,数据量比较大(E5),查找效率不高会超时。
一开始用TreeSet,可是无法解决重新插入时的次数增加问题,因为TreeSet无法索引到具体某个元素。后来改用TreeMap,问题迎刃而解。
代码
1
import java.io.*;
2
import java.util.*;
3
import java.math.*;
4
class Main
5![]()
![]()
{
6
public static char[] numberMap = new char[300];
7
public static void main(String[] args)
8![]()
{
9
getMap();
10
Scanner sc = new Scanner(System.in);
11![]()
12
int N = sc.nextInt();
13
sc.nextLine();
14
//String[] strAry = new String[N];\
15
String str;
16
StringBuffer[] strBufs = new StringBuffer[N];
17
18
19
for(int i = 0; i < N; i++)////read
20![]()
{
21
str = sc.nextLine();
22
StringBuffer strbuf = new StringBuffer();
23
char[] charAry = str.toCharArray();
24
for(int j = 0; j < charAry.length; j++)
25![]()
{
26
if(charAry[j] != '-')
27
strbuf.append(numberMap[charAry[j]]);
28
}
29
strBufs[i] = strbuf;
30
}
31
32
////
33![]()
/**//*for(StringBuffer strt : strBufs)
34
{
35
System.out.println("strt=" + strt);
36
}*/
37
//
38
TreeMap<String, Integer> trmap = new TreeMap<String, Integer>();
39
for(StringBuffer buft2 : strBufs)
40![]()
{
41
if(trmap.get(buft2.toString()) != null)
42![]()
{
43
int times = trmap.get(buft2.toString());
44
trmap.put(buft2.toString(), times + 1);
45
}
46
else
47![]()
{
48
trmap.put(buft2.toString(), 1);
49
}
50
}
51
Set<String> keyset = trmap.keySet();
52
int haveout = 0;
53
for(String buf3 : keyset)
54![]()
{
55
int times = trmap.get(buf3);
56
if(times > 1)
57![]()
{
58
StringBuffer outbuf = new StringBuffer();
59
outbuf.append(buf3.toCharArray(), 0, 3);
60
outbuf.append('-');
61
62
outbuf.append(buf3.toCharArray(), 3, 4);
63
64
System.out.println(outbuf + " " + times);
65
haveout = 1;
66
}
67
}
68
if(haveout == 0)
69![]()
{
70
System.out.println("No duplicates.");
71
}
72
73
74
}
75
public static void getMap()
76![]()
{
77
numberMap['A'] = '2';
78
numberMap['B'] = '2';
79
numberMap['C'] = '2';
80![]()
81
numberMap['D'] = '3';
82
numberMap['E'] = '3';
83
numberMap['F'] = '3';
84![]()
85
numberMap['G'] = '4';
86
numberMap['H'] = '4';
87
numberMap['I'] = '4';
88![]()
89
numberMap['J'] = '5';
90
numberMap['K'] = '5';
91
numberMap['L'] = '5';
92![]()
93
numberMap['M'] = '6';
94
numberMap['N'] = '6';
95
numberMap['O'] = '6';
96![]()
97
numberMap['P'] = '7';
98
numberMap['R'] = '7';
99
numberMap['S'] = '7';
100![]()
101
numberMap['T'] = '8';
102
numberMap['U'] = '8';
103
numberMap['V'] = '8';
104![]()
105
numberMap['W'] = '9';
106
numberMap['X'] = '9';
107
numberMap['Y'] = '9';
108![]()
109
numberMap['1'] = '1';
110
numberMap['2'] = '2';
111
numberMap['3'] = '3';
112
numberMap['4'] = '4';
113
numberMap['5'] = '5';
114
numberMap['6'] = '6';
115
numberMap['7'] = '7';
116
numberMap['8'] = '8';
117
numberMap['9'] = '9';
118
numberMap['0'] = '0';
119
}
120
}
121
一开始用TreeSet,可是无法解决重新插入时的次数增加问题,因为TreeSet无法索引到具体某个元素。后来改用TreeMap,问题迎刃而解。
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