一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复最多的则都输出。

/**
 * 一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复最多的则都输出。
 * 思路:
 * 1、获取字符串
 * 2、ArrayList+Collections.sort排序,存入input
 * 3、TreeSet获取各个字符(TreeSet属性:重复的不可以加入)
 * 4、求TreeSet中各个字符在input中的最小和最大索引,从而得出各个字符出现的次数,然后取出出现次数最多的字符,记为maxString(字符)和max(次数),加入ArrayList<String> maxlist
 *    若有多个重复最多的,则都加入maxlist
 * 5、输出maxlist中maxString以后的元素
 * 
 */

package t7_3;
import java.util.*;
import java.util.Collections;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;
import java.io.*;


public class Test7_3 {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		System.out.println("输入字符串");
		BufferedReader bu = new BufferedReader(
				new InputStreamReader(
						System.in));
		
		String input = bu.readLine();
		new Test7_3().doString(input);
		//System.out.println(input);
		
		
	}
	public void doString(String input){
		char[] chars = input.toCharArray();
		ArrayList<String> lists = new ArrayList<String>();//为了调用Collections.sort(lists);排序
		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);//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 = (String)its.next();
			int begin = input.indexOf(os);//排序后(聚集)os字符的最小索引
			int end = input.lastIndexOf(os);//排序后(聚集)os字符的最大索引
			int value = end - begin + 1;//os字符个数
			if(value > max){//获取出现次数最多的那个字符
				max = value;//那个字符的出现次数
				maxString = os;//那个字符
				maxlist.add(os);
			}else if(value == max){
				maxlist.add(os);//如果好多个字符都出现max次,则放入maxString的后面
			}
		}
		int index = 0;
		for(int i=0; i<maxlist.size(); i++){
			if(maxlist.get(i).equals(maxString)){
				index = i;//maxString的索引
				break;
				
			}
		}
		System.out.println("max data");
		for(int i=index; i<maxlist.size(); i++){//输出maxString和其后面的字符(出现次数相同,都是max)
			System.out.println(maxlist.get(i)+" ");
		}
		System.out.println();
		System.out.println("max "+max);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值