java 笔试题4

题目:一个字符串可能包含多个字符,求出现次数最多的那个字符及 次数。如有多个重复的则都求出。

自己写的代码:

package com.li.test1.classes;
/**
 * 给定一个字符串,如"abcdabcdabcd",输出重复最多的字符及其重复次数。
 */
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Reduplicate {
	public static Map<Character, Integer> map = new HashMap();
	public static Map<Character, Integer> getResult(Map<Character, Integer> map) {
		List<Character> chararray = new ArrayList();
		List<Integer> intarray = new ArrayList();
		for (char c : map.keySet()) {
			chararray.add(c);
			intarray.add(map.get(c));
		}
		int max=0;
		for (int i = 0; i < intarray.size() ; i++) {
			if (intarray.get(max) < intarray.get(i )) {
				map.remove(chararray.get(max));
				max=i;
			} else if(intarray.get(max) > intarray.get(i)) {
				map.remove(chararray.get(i));				
			}
		}
		return map;
	}

	public static void updateCount(char c) {

		if (map.containsKey(c)) {
			Integer i = map.get(c);
			i++;
			map.remove(c);
			map.put(c, new Integer(i));
		}
	}

	public static Map<Character, Integer> findReduplicate(char[] array) {
		for (char c : array) {
			if (map.containsKey(c)) {
				updateCount(c);
			} else {
				map.put(c, new Integer(1));
			}
		}
		return getResult(map);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "acacacacbdbdbbbbb0000000@@@@@@@";
		long start = System.nanoTime();
		System.out.println(findReduplicate(str.toCharArray()));
		System.out.println(System.nanoTime() - start);
	}
}
运行结果:

{0=7, @=7, b=7}
4019020

面试宝典给出的答案:

package com.li.test1.classes;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;

public class MsbdReduplicate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "acacacacbdbdbbbbb0000000@@@@@@@";
		long start = System.nanoTime();
		new MsbdReduplicate().doString(str);
		System.out.println(System.nanoTime() - start);

	}

	public void doString(String input) {
		char[] chars = input.toCharArray();
		ArrayList lists = new ArrayList();
		TreeSet set = new TreeSet();

		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 maxlist = new ArrayList();

		Iterator its = set.iterator();
		while (its.hasNext()) {
			String os = (String) its.next();
			int begin = input.indexOf(os);
			int end = input.lastIndexOf(os);
			int value = end - 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;
			}
		}
		for (int i = index; i < maxlist.size(); i++) {
			System.out.println(maxlist.get(i) + "  ");
		}
		System.out.println("max:" + max);
	}

}
运行结果:

[0, @, a, b, c, d]
[0, 0, 0, 0, 0, 0, 0, @, @, @, @, @, @, @, a, a, a, a, b, b, b, b, b, b, b, c, c, c, c, d, d]
0000000@@@@@@@aaaabbbbbbbccccdd
0  
@  
b  
max:7
3424993



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值