0보다 1의 더 긴 연속 세그먼트

1795 단어 theabbieleetcodedsa
이진 문자열 s가 주어지면 true의 가장 긴 연속 세그먼트가 10의 가장 긴 연속 세그먼트보다 엄격하게 길면 s를 반환하고, 그렇지 않으면 false를 반환합니다.
  • 예를 들어, s = "110100010"에서 1 s의 가장 긴 연속 세그먼트의 길이는 2이고 0 s의 가장 긴 연속 세그먼트의 길이는 3입니다.
  • 0가 없으면 0의 가장 긴 연속 세그먼트는 길이가 0인 것으로 간주됩니다. 1 이 없는 경우에도 마찬가지입니다.

    예 1:

    입력: s = "1101"
    출력: 참
    설명:
    1s의 가장 긴 연속 세그먼트의 길이는 2: "1101"입니다.
    가장 긴 연속 세그먼트 0의 길이는 1: "1101"
    1s의 세그먼트가 더 길기 때문에 true를 반환합니다.

    예 2:

    입력: s = "111000"
    출력: 거짓
    설명:
    1s의 가장 긴 연속 세그먼트의 길이는 3: "111000"
    가장 긴 연속 0 세그먼트의 길이는 3: "111000"
    1s의 세그먼트는 더 길지 않으므로 false를 반환합니다.

    예 3:

    입력: s = "110100010"
    출력: 거짓
    설명:
    1의 가장 긴 연속 세그먼트의 길이는 2: "110100010"
    가장 긴 연속 0 세그먼트의 길이는 3: "110100010"
    1s의 세그먼트는 더 길지 않으므로 false를 반환합니다.

    제약:
  • 1 <= s.length <= 100
  • s[i]'0' 또는 '1' 입니다.

  • 해결책:

    class Solution:
        def checkZeroOnes(self, s: str) -> bool:
            s += "x"
            longest = [0, 0]
            curr = [0, 0]
            for c in s:
                if c == "x":
                    longest[0] = max(longest[0], curr[0])
                    longest[1] = max(longest[1], curr[1])
                elif c == "1":
                    longest[0] = max(longest[0], curr[0])
                    curr[0] = 0
                    curr[1] += 1
                elif c == "0":
                    longest[1] = max(longest[1], curr[1])
                    curr[1] = 0
                    curr[0] += 1
            return longest[1] > longest[0]
    

    좋은 웹페이지 즐겨찾기