先日できなかった...!
悔しいです..!!!!
仕方なしですね...
21日目は飛ばして22からです!
ではやっていきます!
434. Number of Segments in a String
今回の問題はこちらです!
問題としては、英語の文章に置いて、空白で区切られた単語がいくつあるのか?を調べる問題になっています。
例をお借りすると...
Input: s = "Hello, my name is John"
Output: 5
上記の、"Hello, my name is John"の場合..
"Hello,", "my", "name", "is", "John"で、5ですね。
そのため、5が正解になります。
アルゴリズム
今回もpythonのメソッドパワーをお借りしていきます...!(二週目以降はもっとちゃんとした感じで考えます...)
では、みていきます!
まずは単純に、文章中の出現回数を抽出します。
今回はpythonでCollectionsというものがあるらしいので、それを利用しました。
c = collections.Counter(s.split(' '))
上記にて、splitで空白区切りで値と出現回数を保持します。
# printするとこんな感じです。
Counter({'Hello,': 1, 'my': 1, 'name': 1, 'is': 1, 'John': 1})
この中から、出現回数だけ和を出せばいいはずなので...
print(c.values())
print(sum(c.values()))
dict_values([1, 1, 1, 1, 1])
5
上記のように、valuesで値だけ抽出後、それの和を求めれば良さそうです。
ただし...
上記だけではうまくいかず、スペースに何も挟まれていない場合もカウントされてしまうようです。
## "Hello, my name is John "の場合
Counter({'': 5, 'Hello,': 1, 'my': 1, 'name': 1, 'is': 1, 'John': 1})
例外としてはこの'' の数値だけ取り除くだけでうまくいきそうなため、値を指定して''のものだけpopして取り除き、その値をのぞいた総和を求めることで対応しました。
popの際、何かしら値がない場合、default値を指定しなければエラーになってしまうため、今回は何も使いませんが, 見つからない場合のデフォルトの返り値をつけています。
c.pop('', "Not Found")
そこだけしっかり修正すれば、acceptになりました。
提出したコード
import collections
class Solution:
def countSegments(self, s: str) -> int:
c = collections.Counter(s.split(' '))
c.pop('', "Not Found")
return sum(c.values())
## 結果
Runtime: 40 ms, faster than 12.42% of Python3 online submissions for Number of Segments in a String.
Memory Usage: 14.4 MB, less than 10.41% of Python3 online submissions for Number of Segments in a String.