一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复则都求出来。
一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复则都求出来。 /**//* * Main.java * * Created on 2007-9-28, 22:39:31 * * To change this template, choose Tools | Templates * and open the template in the editor. */
package test;
import java.util.*;
/** *//** * * @author Jeffery */ public class Main ...{
/** *//** * @param args the command line arguments */ public static void main(String[] args) ...{ String input = "aavzcadfdsfsdhshgWasdfasdfdddaaa"; new Main().doString(input); }
public void doString(String input) ...{ char[] chars = input.toCharArray(); ArrayList<String> lists = new ArrayList<String>(); TreeSet<String> set = new TreeSet<String>(); for (int i = 0; i < chars.length; i++) ...{ lists.add(String.valueOf(chars[i])); set.add(String.valueOf(chars[i])); } System.out.println(set); Collections.sort(lists); System.out.println(lists);
StringBuffer sb = new StringBuffer(); for (int i = 0; i < lists.size(); i++) ...{ sb.append(lists.get(i)); }
input = sb.toString(); System.out.println(input); int max = 0; String maxString = ""; ArrayList<String> maxlist = new ArrayList<String>();
Iterator<String> its = set.iterator(); while (its.hasNext()) ...{ String os = its.next(); int begin = input.indexOf(os); int last = input.lastIndexOf(os); int value = last - begin + 1;
if (value > max) ...{ max = value; maxString = os; maxlist.add(os); } else if (value == max) ...{ maxlist.add(os); } } int index = 0; for (int i = 0; i < maxlist.size(); i++) ...{ if (maxlist.get(i).equals(maxString)) ...{ index = i; break; } }
System.out.print("The most occured character is "); for (int i = index; i < maxlist.size(); i++) ...{ System.out.print(maxlist.get(i) + " "); } System.out.println(); System.out.println("They occured " + max + " times"); } } 小结: 引入TreeSet:通过集合快速找到所有出现的字符,去除冗余; 引入ArrayList,使用快速排序,生成排序后的字符串; 如果频繁修改操作String,建议用StringBuffer类; 如果出现次数相同,则把相应的字符都记录到一个新的List里面; 使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。 小结: 引入TreeSet:通过集合快速找到所有出现的字符,去除冗余; 引入ArrayList,使用快速排序,生成排序后的字符串; 如果频繁修改操作String,建议用StringBuffer类; 如果出现次数相同,则把相应的字符都记录到一个新的List里面; 使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。
|
|