字符串是一个唯一的值,可以用map进行存储。同时,需要对出现的次数进行,排序,map不支持排序。可以使用SortedSet的实现进行求解。map+treeset可以解决。最后注意一下k的取值可能大雨map.size就行了。
public class NC97 {
/**
* return topK string
*
* @param strings string字符串一维数组 strings
* @param k int整型 the k
* @return string字符串二维数组
*/
public String[][] topKstrings(String[] strings, int k) {
HashMap<String, Data> map = new HashMap<>();
TreeSet<Data> list = new TreeSet<>();
for (String str : strings) {
if (map.containsKey(str)) {
Data data = map.get(str);
list.remove(data);
data.val++;
list.add(data);
} else {
Data data = new Data(1, str);
map.put(str, data);
list.add(data);
}
}
if (k>list.size()){
k = list.size();
}
String[][] result = new String[k][];
for (int i = 0; i < k; i++) {
Data data = list.pollLast();
result[i] = new String[2];
result[i][0] = data.str;
result[i][1] = String.valueOf(data.val);
}
return result;
}
}
class Data implements Comparable<Data> {
Integer val;
String str;
public Data(Integer val, String str) {
this.val = val;
this.str = str;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Data data = (Data) o;
return Objects.equals(str, data.str);
}
@Override
public int hashCode() {
return Objects.hash(str);
}
@Override
public int compareTo(Data o) {
int i = this.val.compareTo(o.val);
if (i != 0) {
return i;
} else {
return o.str.compareTo(this.str);
}
}
}
京公网安备 11010502036488号