java 如何快速求一个字符串数组中出现最多次数的字符串?字符串数组存在大量重复.要最快速度.

如题所述

第1个回答  2012-03-06
这样就OK了,你试一下
class Test
{
public static void main(String[] args)
{
int max=1;
String[] strs={"a","b","f","a","d","c","e","d","a","d"};
for(int i=0;i<strs.length-1;i++)
{
int count=1;
for(int j=i+1;j<strs.length;j++)
{
if(strs[i].equals(strs[j]))
count++;
}
if(max<count)
max=count;
}
System.out.println("重复最多次数为:"+max);
for(int i=0;i<strs.length-1;i++)
{
int count=1;
for(int j=i+1;j<strs.length;j++)
{
if(strs[i].equals(strs[j]))
count++;
}
if(count==max)
System.out.println("重复最多次("+max+")的字符串为:"+strs[i]);
}
}
}追问

有点复杂了. 我自己想了一个办法,你看行不行.我用hashmap存储这些字符串,如果发现重复就把value加1,说明这个词多出现了1次,然后添加2个标记,一个标记当前最大value,一个存储当前最大value对应的字符串. 一次遍历之后得到最大频率的字符串. 这样是不是效率些?

追答

关键是怎么判断重复,并且重复了多少次,都差不多

追问

因为这部分是一个大程序里面的一小部分. 所以我要求速度很快.
你的程序是不是会慢一些? 复杂度是O(N^2)吧.
我说的办法复杂度应该是O(N).

本回答被提问者采纳
第2个回答  2012-04-28
public static String[] arrayUnique(String[] a){
List<String> list = new LinkedList<String>();
for (int i = 0; i < a.length; i++) {
if(!list.contains(a[i])){
list.add(a[i]);
}
}
return (String[])list.toArray(new String[list.size()]);
}
相似回答