截取字符串并失去相同次数最多的字符串

截取字符串并得到相同次数最多的字符串

String   keywords="生活;生活;中国;美国;asd;asd;asd;色彩;色彩;nike;nike;nike;nike"
然后得到相同次数前三个的词汇
就是得到nike asd 中国 色彩
------解决思路----------------------
var keywords="生活;生活;中国;美国;asd;asd;asd;色彩;色彩;nike;nike;nike;nike"
var count = {};
keywords = keywords.split(';');
for(var i=0;i<keywords.length;i++){
  if(!count[keywords[i]]){
    count[keywords[i]] = 1;
  }else{
    count[keywords[i]] ++;
  }
}
var arr = []
for(var p in count){
  arr.push([p,count[p]]);
}
arr.sort(function(v1,v2){
  return v1[1] > v2[1] ? -1 : 1;
})
console.log(arr)

不擅长算法,坐等牛人更好的办法
------解决思路----------------------

var keywords="生活;生活;中国;美国;asd;asd;asd;色彩;色彩;nike;nike;nike;nike";
var arr = keywords.split(";");
var g = {}, ta = [];
for (var i=0, l = arr.length; i<l; ++i)
if(g[arr[i]])
g[arr[i]]++;
else
{
g[arr[i]]=1;
ta.push(arr[i]);
}
ta.sort(function(a,b){return g[b]-g[a]});
alert(ta);


------解决思路----------------------

String keywords = "生活;生活;中国;美国;asd;asd;asd;色彩;色彩;nike;nike;nike;nike";
String kws[] = keywords.split(";");
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (String a : kws)
map.put(a, map.containsKey(a) ? map.get(a) + 1 : 1);
List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(
map.entrySet());
Collections.sort(infoIds,
new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
});
for (int i = 0; i < infoIds.size() && i < 4; i++)
System.out.println(infoIds.get(i).getKey());