给定一个字符串,找出其中相同字符的个数,打印出最多的字符串。一个字符串中可能包含a~z中的多个字符,如有重复,如Stringda
(起初做这道题的时候存储在数组里,来实习公司,一老大说,一般这种求字符串的题目而且在java中一般是考你集合的知识,后来一看网上的解答,果真都是这样,而且时间复杂度小)把自己写的一个程序传了上来希望有人能有更好地方法
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public class FindRepeat {
public static void doString(String str){
char[] array=str.toCharArray();
ArrayList list=new ArrayList();
TreeSet set=new TreeSet();
for(int i=0;i<array.length;i++){
list.add(String.valueOf(array[i]));
set.add(String.valueOf(array[i]));
}
Collections.sort(list);
System.out.println("list获得的值为:"+list);
System.out.println("set获得的值为:"+set);
StringBuffer sb=new StringBuffer();
for(int i=0;i<list.size();i++){
sb=sb.append(list.get(i));
}
str=sb.toString();
int max=0;
HashMap hm=new HashMap();
for(Iterator itss=set.iterator();itss.hasNext();){
String os=(String)itss.next();
int begin=str.indexOf(os);
int end=str.lastIndexOf(os);
int value=end-begin+1;
hm.put(os,value);
if((value>max)&&(value>1)){
max=value;
}
}
Set set2=hm.entrySet();
Iterator iterator=set2.iterator();
while(iterator.hasNext()){
Map.Entry mapentry=(Map.Entry)iterator.next();
if(mapentry.getValue().equals(max)){
System.out.println("最多的字符串为:"+mapentry.getKey());
System.out.println("最多的次数为:"+max);
}
}
}
public static void main(String[] args){
String strInput = new String("aavzcadfdsfsdhshgWasdfasdf");
doString(strInput);
}
}