去哪儿网2015校招研发类笔试题(2014-9-10,大连站)

自己做的,有不足的地方,多多指教(比如时间复杂度,空间效率等方面)


1、二分查找,见之前的博客

2、给定一个字符串,得到这个字符串中首先出现两次的那个字符

这题不难,最简单的方法,就是把这些字符放到集合里面,如果出现2次了,就返回该字符

public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String src = scanner.next();
		HashMap<Character,Integer> items = new HashMap<Character,Integer>();
		for(int i=0;i<src.length();i++){
			if(!items.containsKey(src.charAt(i))){
				items.put(src.charAt(i), 1);
			}else{
				System.out.println(src.charAt(i));
				break;
			}
		}
	}

3、尝试在以下文本中搜索并打印出包含单词"your"(不区分大小写)的句子,并按照出现次数从高到低排序 

Make yourself at home
None of your business
I will be more careful
 How about going to a move?
Your life is your own affair

思路:先统计每个字符串句子中包括“your”的个数,然后按个数排序


public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		String[] src = new String[1024];// 最多接收1024个句子
		HashMap<String, Integer> items = new HashMap<String, Integer>();
		int i = 0;
		while (!(src[i++]=s.nextLine()).equals("EOF")) {
			int count = countSubstr(src[i-1], "you", true);
			items.put(src[i - 1], count);
		}

		// 对HashMap排序
		ArrayList<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(
				items.entrySet());
		
		Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
			@Override
			public int compare(Map.Entry<String, Integer> o1,
					Map.Entry<String, Integer> o2) {
				return o2.getValue() - o1.getValue();
			}
		});

		for (Entry<String, Integer> e : list) {
			System.out.println(e.getKey() + "===>" + e.getValue());
		}

	}

	/**
	 * 判断子字符串在原字串中出现的次数
	 * 
	 * @param src
	 * @param sub
	 * @param isIgnore
	 *            是否忽略大小写 true是忽略
	 */
	private static int countSubstr(String src, String sub, boolean isIgnore) {
		int count = 0, start = 0;
		if (isIgnore) {
			src = src.toLowerCase();
			sub = sub.toLowerCase();
		}
		while ((start = src.indexOf(sub, start)) >= 0) {
			start += sub.length();
			count++;
		}
		return count;
	}


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值