[プログラマ]インプリメンテーション-文字列圧縮


質問リンク
エンコーディングテスト練習-文字列圧縮
問題の説明
与えられた文字列sをパラメータとして文字列の先頭からn単位に切り取って圧縮する場合、圧縮文字列の中で最も短い長さreturn
問題を解く
試してみる.
文字列を1つの単位からlen(s)/2+1つの単位にカットし、リストに置いて、それぞれ比較します.
def solution(s):
    length = len(s)
    answer = length
    
    for l in range(1, length//2+1):
        compressed = ""
        count = 1
        #주어진 문자열을 1개부터 length//2개단위로 자르기
        lst = [s[i:i+l] for i in range(0, len(s), l)]
        
				#
				#
				#
    return answer
どのようにカットを完了したのか、リストで同じ文字列を比較する方法は思いつかない.ドアを回すと、圧縮要素がポップアップできないので、圧縮要素を-1などに変換しても、どうせ回転時に再確認して同じ問題が発生します.知らなかったので、答えを見ました.
正しいコード
def solution(s):
    length = len(s)
    answer = length
    
	#1개 단위부터 압축단위를 늘려가면서 확인하기
    for step in range(1, length//2+1):
        compressed = ""
        count = 1
        prev = s[0:step]

		#단위 크기만큼 증가시키며 이전 문자열과 비교 
        for j in range(step, len(s), step):
            if prev == s[j:j+step]:
                count += 1
			#더이상 압축하지 못하는 경우
            else:
                compressed += str(count) + prev if count >= 2 else prev
				#상태 초기화
                prev = s[j:j+step]
                count = 1

				#남은 문자열에 대해 처리
        compressed += str(count) + prev if count >= 2 else prev
        answer = min(answer, len(compressed))

    return answer
このコードは、まず入力した文字列をリストにカットします.私が比較しようとしたのとは異なり、毎回カット比較を行います.また、リストで同じ文字列を比較して操作している私とは異なり、compressedという文字列を宣言し、圧縮の結果を個別に保存しました.
せきぶん
  • 以前の文字列を保存し、
  • を比較する.
  • 圧縮結果を付加し、
  • を保存する.
    試してみる.
    def solution(s):
        length = len(s)
        answer = length
        
        for l in range(1, length//2+1):
            compressed = ""
            count = 1
            lst = [s[i:i+l] for i in range(0, len(s), l)]
            prev = lst[0]
    
            for i in range(1, len(lst)):
                if prev == lst[i]:
                    count += 1
                else:
                    compressed += str(count) +prev if count>=2 else prev
                    count = 1
                    prev = lst[i]
                    print(compressed)
    
            compressed += str(count) +prev if count>=2 else prev
            answer = min(answer, len(compressed))
    
        return answer
    正解を見て、比較的重複する文字列の部分を再編成しました.
    難しいですね~来週もう一度やります
    今日知ったこと

  • 文字列をn単位で切り取り、リストに保存
    lst = [s[i:i+l] for i in range(0, len(s), l)]

  • 1行if文に書く
    compressed += str(count) +prev if count>=2 else prev