[プログラマー60057]2020公募1番文字列圧縮


質問する


[プログラマ60057]文字列圧縮

コード#コード#

def solution(s):
    answer = s[:]
    # le: 압축할 길이
    for le in range(1,len(s)//2+1):
        result = ''
        cnt = 1
        
        # 현재 문자열과 다음 문자열을 비교해서 
        for st in range(0,len(s),le):
        
            # 같으면 cnt만 증가
            if s[st:st+le]==s[st+le:st+2*le]:
                cnt += 1
                
            # 다르면 현재까지 압축한 결과 붙이기
            else:
                if cnt>1:
                    result += (str(cnt)+s[st:st+le])
                else:
                    result += s[st:st+le]
                cnt = 1
                
        if len(result)<len(answer):
            answer = result[:]
    
    return len(answer)

に答える

  • 現在の文字列を次の文字列と比較します:同時にcntを増加します;同時に圧縮後の結果を貼り付けません:
  • 最後の文字列も例外ではありません
    最後の文字列
  • の場合、s[st+le:st+2*le]''であるため、無条件にelseに移動する
  • の最後の文字列が前の文字列と同じ場合、result += (str(cnt)+s[st:st+le])が実行され、異なる場合でもresult += s[st:st+le]が実行されるので、最後の文字列を貼り付けることができます.
  • まちがい


    最初、答えは意外にもa*1001に初期化され、テスト5は合格しなかった.
    ヒントを見るとすぐにどこが間違っているのかわかりますが、実戦なら迷うかもしれません.