LeetCode: First Unique Character in a String
Question
在字串中找出第一個 “唯一” 的字,並回傳它的位置。如果都是重複的字,就會回傳 -1
Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1.
s = “loveleetcode” # return 2.
Note: You may assume the string contain only lowercase letters.Solution
首先需要用 split(“”) 方法把傳進來的字串分開來,並且指定給 arr_string。 如此一來,每個單一字母就能夠被比對和計算出現的次數。
我選擇用 Hash 來記錄比對的資訊(key 是字母, value是出現的次數)。 這裡要記得給 Hash 初始值為 0,否則你會得到以下錯誤訊息:
undefined method `+' for nil:NilClass (NoMethodError)
因為在預設的狀態下,Hash 的初始值是 nil。
再以 each 方法,逐個地從 arr_string(Array 型態)轉出來,當作 Hash 的 key。 如果遇到重複的字母出現,Hash 會比對 key 然後在 value 的值增加 1。
當 each 方法跑完之後,代表已經紀錄完成每個字母出現的次數了。 因為題目要的是 “唯一” 代表的就是出現過一次的字母,所以要找在 Hash 裡 value 為 1 的 key。最後使用了 Array 提供的 index 方法,便可以輕鬆地以字母找到正確位置。
def first_uniq_char(str)
arr_string = str.split('')
counter = Hash.new(0)
arr_string.each do |chr|
counter['chr'] += 1
end
position = arr_string.index(counter.key(1))
position || -1
end
Comments