문자열 압축

1669 단어 theabbieleetcodedsa
문자 배열chars이 주어지면 다음 알고리즘을 사용하여 압축합니다.

빈 문자열로 시작합니다s. chars의 각 연속 반복 문자 그룹에 대해 다음을 수행합니다.
  • 그룹의 길이가 1 인 경우 s 에 문자를 추가합니다.
  • 그렇지 않으면 문자 뒤에 그룹 길이를 추가합니다.

  • 압축된 문자열s은 별도로 반환하지 말고 입력 문자 배열chars에 저장해야 합니다. 10 이상의 그룹 길이는 chars 에서 여러 문자로 분할됩니다.

    입력 배열 수정을 완료한 후 배열의 새 길이를 반환합니다.

    일정한 추가 공간만 사용하는 알고리즘을 작성해야 합니다.

    예 1:

    입력: chars = ["a","a","b","b","c","c","c"]
    출력: 6을 반환하고 입력 배열의 처음 6자는 다음과 같아야 합니다. ["a","2","b","2","c","3"]
    설명: 그룹은 "aa", "bb"및 "ccc"입니다. 이것은 "a2b2c3"로 압축됩니다.

    예 2:

    입력: 문자 = ["a"]
    출력: 1을 반환하고 입력 배열의 첫 번째 문자는 ["a"]여야 합니다.
    설명: 유일한 그룹은 "a"이며 단일 문자이므로 압축되지 않은 상태로 유지됩니다.

    예 3:

    입력: chars = ["a","b","b","b","b","b","b","b","b","b","b","비","비"]
    출력: 4를 반환하고 입력 배열의 처음 4자는 ["a","b","1","2"]여야 합니다.
    설명: 그룹은 "a"및 "bbbbbbbbbbbb"입니다. 이것은 "ab12"로 압축됩니다.

    제약:
  • 1 <= chars.length <= 2000
  • chars[i]는 영문 소문자, 영문 대문자, 숫자 또는 기호입니다.

  • 해결책:

    class Solution:
        def compress(self, chars: List[str]) -> int:
            n = len(chars)
            i = 0
            while i < n:
                ctr = 1
                while i < n - 1 and chars[i] == chars[i + 1]:
                    i += 1
                    ctr += 1
                i += 1
                if ctr == 1:
                    chars.extend([chars[i - 1]])
                else:
                    chars.extend([chars[i - 1]] + list(str(ctr)))
            for i in range(n):
                chars.pop(0)
            return len(chars)
    

    좋은 웹페이지 즐겨찾기