[アルゴリズム]圧縮プログラム2次文字列
1968 ワード
def solution(s):
lenS = len(s)
num = 1
result = []
if lenS == 1:
return 1
while True:
stack = []
for i in range(0, lenS):
if i % num == 0:
stack.append(s[i:i+num])
if len(stack) == len(s):
result.append(stack)
if len(stack) != 1:
result.append(stack)
num += 1
if num == lenS + 1 :
break
kikiki = 1000
for answer in result:
new = []
index = 0
k = 0
while True:
if answer[index] == answer[index+1]:
index += 1
else:
new.append(answer[k:index+1])
k = index + 1
index += 1
if index == len(answer)-1:
new.append(answer[k:index+1])
break
new_str = ''
for n in new:
if len(n) != 1:
new_str += str(len(n))
new_str += str(n[0])
if len(new_str) < kikiki:
kikiki = len(new_str)
return kikiki
I/O例
解法
aabbaccc
一つ、二つ...八つに切る.たとえば、1つを基準として切り取る場合は、スタックに配置し、resultに再配置します.'a', 'a', 'b', 'b', 'a', 'c', 'c', 'c'
の場合、ループではindexとindex+1を組み合わせます.この例では、newには['a', 'a', 'b', 'b', 'a', 'c', 'c', 'c']
が含まれる.[['a', 'a'], ['b', 'b'], ['a'], ['c', 'c', 'c']]
sの長さは1000以下でkikikiにsの長さを指定し、new strの長さがkikikiより小さい場合はnew strを指定します.Reference
この問題について([アルゴリズム]圧縮プログラム2次文字列), 我々は、より多くの情報をここで見つけました https://velog.io/@minidoo/알고리즘-프로그래머스-2단계-문자열-압축テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol