Code Kata | Day 5


質問する
strsは単語を含む配列です.
共通の開始語(prefix)を返してください.
예를 들어
strs = ['start', 'stair', 'step']
return'st'

strs = ['start', 'wework', 'today']
return''
私の答え
def get_prefix(strs):
  sorted_strs = sorted(strs)
  
  if strs == []:
    return ''

  if sorted_strs[0][0] != sorted_strs[-1][0]:
    return ''

  if len(sorted_strs[0]) > len(sorted_strs[-1]):
    shortest = len(sorted_strs[-1])
  elif len(sorted_strs[0]) <= len(sorted_strs[-1]):
    shortest = len(sorted_strs[0])
  
  answer = []

  for i in range(shortest):
    if sorted_strs[0][i] == sorted_strs[-1][i]:
      answer.append(sorted_strs[0][i])
  print(answer)  
  return ''.join(answer)
模範解答
def get_prefix(strs):
    if len(strs) == 0:
        return '' 
    res = ''
    strs = sorted(strs)
    for i in strs[0]:
        if strs[-1].startswith(res+i):
            res += i
        else:
            break
    return res
初めて聞いたPythonメソッドstartswithを使用しました.
論理は似ているようだがstartswith法を用い,これは簡潔で未熟なコードである.startswtihは文字列が特定の文字で始まるかどうかを判断し、上の論理はボンニリストの最後の文字列がres+iで始まるかどうかを判断する.
例えば、strs = ['start', 'stair', 'step']という名前のリストがある場合、stepの文字列がres+iで始まるかどうかを判断する.resは最初は空の文字列であり、startの「s(i)」から正しく判断され、resに格納され、次のres+i(st)を再判断し、resに格納される.
そしてこれ以上当たらないと、止まります.startswithを探して、勉強して、また少し理解できる問題です.
解けるときは知らないPythonが多いと思いますが、学識があるのはいいですね!