Encoding
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 49076 Accepted Submission(s): 21875
Problem Description
Given a string containing only 'A' - 'Z', we could encode it using the following method:
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
Input
The first line contains an integer N (1 <= N <= 100) which indicates the number of test cases. The next N lines contain N strings. Each string consists of only 'A' - 'Z' and the length is less than 10000.
Output
For each test case, output the encoded string in a line.
Sample Input
2 ABC ABBCCC
Sample Output
ABCA2B3C
翻译:不用翻译了
核心:用java的map做,真是简单,当然c,c++做也是一点都不难
错误:我犯了个错误:错误定义了数组长度,想当然地定义了100,然后添加了94个空的‘’到map里去,然后输出的时候就莫名其妙了。
代码:
public class Encoding1020 { char[] mChars; Encoding1020(char...chars) { mChars = new char[chars.length]; System.arraycopy(chars, 0, this.mChars, 0, chars.length); } private Map<Character, Integer> sort(char[] chars) { Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < chars.length; i ++) { char c = chars[i]; if (!map.containsKey(c)) { map.put(c, 1); } else { int num = map.get(c); map.put(c, ++num); } } return map; } public static void main(String[] args) throws Exception { Encoding1020 encoding1020 = new Encoding1020('A','B','B','C','C','C'); Map<Character, Integer> map = encoding1020.sort(encoding1020.mChars); for (Map.Entry<Character, Integer> entry : map.entrySet()) { char key = entry.getKey(); int value = entry.getValue(); if (value != 1) { System.out.print(value + ""); } System.out.print(key + ""); } } }