iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

解三十天的 CodeWars系列 第 7

First non-repeating character

  • 分享至 

  • xImage
  •  

CodeWars 題目

Link

難度

5 kyu

題目

返回字串中,不重複的第一個字元。
大小寫視為相同,但返回時需要返回對應原字串的正確字元。

思路

找不重複字元,那就必定需要確認完整字串。
但又可能有一個或多個的不重複字元。

match 方法在 JavaScript 中會返回一個陣列,其中包含了根據正則表達式匹配的結果。
驗證該 match 的長度,返回第一個長度為 1 的結果,否則回傳空字串。

pseudo code

let reg = /s[0]/gi
let array = s.match(reg)
array.length == 1
return array[0]
else
s = s.replace(reg,"")
f(s) again

實作

function firstNonRepeatingLetter(s) {
   let regExp = new RegExp(s[0], "gi");
   let result = s.match(regExp);
   if (result.length > 1) {
      s = s.replace(regExp, "");
      return firstNonRepeatingLetter(s);
   }
   if (result.length == 1) {
      return result[0];
   }
   return "";
}

取字串的第一字元,建立正則表達式;第二參數 gi 表示找全字串並且忽略大小寫。

match 函數取得匹配的所有字元陣列,驗證該陣列長度:
如果大於 1,取代掉重複字元並使用遞迴再次呼叫。
如果等於 1,則返回該字元結果。

如果以上都不符合,最終返回空字串。

他人的解法

最佳解為相同概念,因此略過。


上一篇
Pete, the baker
下一篇
String incrementer
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言