iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
Software Development

One Punch 一拳搞定前後端面試系列 第 4

[One Punch 一拳搞定前後端面試] DAY-04 - 出現最多次

題目:

寫一個方法(函數):題目給一個字串,請回傳該字串出現最多次的字元。

此文同時發佈於好讀版

Example:


ex1:

  input: "abcccccde"
  output: "c"


ex2:

  input: "qwer33444kif66666"
  output: "6"


JS 解法

提示:

先把每個字元(character)出現的次數轉為 js 的 Object(key & value),{"字元":出現次數}

像是下圖

ex: "hi there"

obj = {
  "h": 2,
  "i": 1,
  " ": 1,
  "t": 1,
  "e": 2,
  "r": 1
}

然後再找出出現次數最多的。

來看看實作吧!

function maxChar(str) {

  // key and value
  let charMap = {}
  for(let char of str){
    if(!charMap[char]){
      charMap[char] = 1
    } else {
      charMap[char] = charMap[char] + 1
    }
  }
  
  // find the max value in the js Object
  let maxCount = 0
  let maxstr = ""
  for(let k in charMap){
    if(charMap[k] > maxCount){
      maxCount = charMap[k];
      maxstr = k
    }
  }

  return maxstr;
  
}

如果聰明的各位有想到,其實可以不用兩層迴圈,如下

function maxChar2(str) {
  let max = 0
  let maxChar = ''
  let charMap = {}

  for (let c of str) {

    charMap[c] = charMap[c] ? charMap[c] + 1 : 1

    if (charMap[c] > max) {
      max = charMap[c]
      maxChar = c
    }
  }

  return maxChar
}

若要考慮到時間複雜度,第二種解法是比較快的唷!

也不是說第一種解法不好,第一種解法是把概念分開寫,會清楚一些。

看看各位讀者喜歡哪種囉!

Java 解法

與提示一樣的概念,只是 key & value 的資料型態在 Java 稱為 Map

public class MaxString {

	private String maxStr(String str) {

		String ary[] = str.split("");

    //put string into key and value
		Map<String, Integer> count = new HashMap<String, Integer>();

		for (String achar : ary) {
			count.put(achar, count.getOrDefault(achar, 0) + 1);
		}

		System.out.println("String hashmap:" + count);

		String maxKey = "";
		int maxValue = 0;

		for (Map.Entry<String, Integer> entry : count.entrySet()) {

			if (entry.getValue() > maxValue) {
				maxValue = entry.getValue();
				maxKey = entry.getKey();
			}
		}
		System.out.println("Max String is" + maxKey);

		return maxKey;
	}

此文同時發佈於好讀版


上一篇
[One Punch 一拳搞定前後端面試] DAY-03 - 判斷回文
下一篇
[One Punch 一拳搞定前後端面試] DAY-05 - FizzBuzz
系列文
One Punch 一拳搞定前後端面試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言