華為機試題-刪除出現次數最少的字元

Allen-Liu發表於2017-09-15

分享一道華為的機試題:


java實現如下:

import java.util.HashMap;//引入類 
import java.util.Scanner; 
import java.util.Set;
public class Shanzifu
{
	public static void main(String[] srgs)
	{
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext())
		{
			String input = sc.next();//獲得輸入
			System.out.println(process(input));//呼叫函式輸出
		}
	}
	public static String process(String in)
	{
		char[] ch = in.toCharArray();
		HashMap<Character, Integer> map = new HashMap();
		//輸入的字元作為鍵,個數作為值
		for (int i = 0; i < ch.length; i++)
		{
			//如果為已有的鍵,只需將值(統計的字元數)加1
			if (map.containsKey(ch[i]))
			{
				map.put(ch[i], map.get(ch[i]) + 1);
			}
			else
				//如果為這樣的鍵,則直接新增鍵值對
				map.put(ch[i], 1);
		}
		int min = 20;//初始值設為最大的可能的數20
		Set<Character> set = map.keySet();
		//遍歷整個集合得到出現次數最小的字元
		for (char c:set)
		{
			if (map.get(c) < min)
				min = map.get(c);
		}
		//將出現次數最少的字元利用替換的方式刪除
		for (char c:set)
		{
			if (map.get(c) == min)
				in = in.replace(String.valueOf(c), "");
		}
		//返回處理後的字串
		return in;
	}
}

Python實現:

__author__ = "Allen Liu"
__time__ = "2017/9/15"
'''This program used to '''
str = input().strip()
inset = set(str)
mi = 20
tmp = []
for i in inset:
    if str.count(i) <= mi:
        mi = str.count(i)
        tmp.append(i)
for i in tmp:
    str = str.replace(i, '')
print(str)



相關文章