iT邦幫忙

1

Ruby解題分享-Implement strStr() && Search Insert Position

  • 分享至 

  • xImage
  •  

下雨的週六...偷懶最適合...

Yes


Implement strStr()

題目連結: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

Search Insert Position

題目連結: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

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言