下雨的週六...偷懶最適合...
題目連結:https://leetcode.com/problems/implement-strstr/
整理如下
def str_str(haystack, needle)
end
p str_str("hello", "ll") #=>2
p str_str("aaaaa", "bba") #=>-1
p str_str("", "") #=>0
題目重點:如果haystack是空字串回傳什麼? 可以向面試官提問。真貼心,但是面試官應該不會問這題??!!
一樣,這種給"目標"比對"值"的解法,跑迴圈比對都是菜鳥我第一個會想到的,但是學什麼語言就多用那語言的優點吧。這題到後面就是看怎麼寫比較"好看"了。我還用split來解,有夠醜
def str_str(haystack, needle)
ans = haystack.index(needle)
if ans != nil
ans
else
-1
end
end
這題主要語法是index用法,字串、陣列、雜湊都可以使用。
2.7.3 :001 > [0, 1, 2, 3, 4].index(3)
=> 3
2.7.3 :002 > [0, 1, 2, 3, 4].index(5)
=> nil
2.7.3 :003 > "今天下雨".index("下雨")
=> 2
2.7.3 :004 > "今天下雨".index("太陽")
=> nil
2.7.3 :005 > "今天下雨".index("天下")
=> 1
2.7.3 :006 > {a: 2, b: 3}.index(2)
=> :a
2.7.3 :007 > {a: 2, b: 3}.index(3)
=> :b
2.7.3 :008 > {a: 2, b: 3}.index(:a)
=> nil
解法減化後
def str_str(haystack, needle)
ans = haystack.index(needle)
ans != nil ? ans : -1
end
def str_str(haystack, needle)
haystack.index(needle) != nil ? haystack.index(needle) : -1
end
def
return -1 unless haystack.index(needle)
return haystack.index(needle)
end
第一種寫法,三元運算子簡化。
第二種,可能需要知道nil與false在Ruby世界中代表什麼。
第三種unless是if的相反,比較像"除非",所以第一句唸起來是"回傳 -1 除非 haystack.index(needle)",一樣如果不熟練布林值語意,反而看不懂。
def str_str(haystack, needle)
return -1 unless haystack.index(needle)
haystack.index(needle)
end
#上面正確,下面錯誤,可以觀察一下。
def str_str(haystack, needle)
-1 unless haystack.index(needle)
haystack.index(needle)
end
題目連結:https://leetcode.com/problems/search-insert-position/
重點:nums contains distinct values sorted in ascending order. 正升且無重複。
等於告訴了我們target如果是0,該怎麼處理。
整理
def search_insert(nums, target)
end
p search_insert([1,3,5,6], 5) #=> 2
p search_insert([1,3,5,6], 2) #=> 1
p search_insert([1,3,5,6], 7) #=> 4
p search_insert([1,3,5,6], 0) #=> 0
p search_insert([1], 0) #=> 0
Ruby中迭代先each,each不夠時,記得還有map就好。
#先不簡化
def search_insert(nums, target)
nums.each_with_index do |num, index|
if num >= target
return index
end #大於0的目標與裡面的值的關係是,剛好相等時回報位置,比較小時取代裡面值的位置
end
nums.size
end
def search_insert(nums, target)
nums.each_with_index do |num, index|
return index if num >= target
end
nums.size
end