[Codekata] Week2 - Day3

7159 ワード

質問する


sは、複数の括弧からなるStringパラメータである.
true/false、sが有効かどうかを返してください.
「(」、「)」、「[」、「]」、「{」、「}」の6種類があります.次の場合に有効です.
かっこを開始するには、同じカッコで終了します.
かっこの順序は正しいです.
例:
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true

に答える


私は結局解けないので、私の解はありません.

#1


いずれにしても、お互いに会う角括弧があるので、会うものを一つ一つ削除します.
最後に、stringが空の場合、Trueの方法を返す
def is_valid(string):
    A = '()'
    B = '{}'
    C = '[]'

    if len(string) % 2 == 1:
      return False

    for i in range(len(string) // 2):    # 짝으로 찾을거니까 range는 string 길이의 반
      if A in string:
        string = string.replace(A, '')
      elif B in string:
        string = string.replace(B, '')
      elif C in string:
        string = string.replace(C, '')
    
    if string == '':
      return True
    else:
      return False

#2


開いたカッコに遭遇した場合は、stackのリストに積み上げます.
最後の開いたかっこと一致する閉じたかっこが見つかった場合は、stackから閉じたかっこを削除します.
def is_valid(string):
  p_dict = {')': '(', ']': '[', '}': '{'} 

  stack = []

  for i in string:
    if i in p_dict.values():
      stack.append(i)
    else:
      # list.pop() 반환값은 제일 마지막 값
      # 반환 후 list에서 마지막 값이 사라짐
      if not stack or p_dict[i] != stack.pop():    # pop의 반환값과 비교
        return False
   
  return not stack

データ構造:Stack

  • 最短第1出力(LIFO)形式で提供されるデータ構造は、一端でのみデータを挿入および削除することができる
    ex)Webブラウザでの後退ボタン

    私が今見ているのは一番上のページです.一番上のページを削除すると(後退)、一番前の
  • ページに戻ります.