몇 개의 공백 사이에 몇 개의 단어가 있는 문자열 s가 있다고 가정합니다. 각 단어는 하나 이상의 공백으로 구분됩니다. 모든 인접 단어 쌍 사이에 동일한 수의 공백이 있고 각 단어 사이의 공백 수가 최대가 되도록 공백을 재배열해야 합니다. 모든 공백을 균등하게 재배포할 수 없는 경우 끝에 추가 공백을 배치할 수 있습니다.
따라서 입력이 s =" I love programming "과 같으면 출력은 "I love programming "이 됩니다. 공백이 분산되어 있고 단어 사이에는 5개의 공백이 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
res :=빈 문자열
-
total_sp :=s의 공백 수
-
suff_sp_cnt :=total_sp
-
text_array :=s의 단어 목록
-
num_words :=text_array의 크기
-
num_words가 1과 같으면
-
res :=text_array[0] total_sp개의 공백과 연결
-
반환 해상도
-
-
sep_size :=total_sp의 몫 /(num_words - 1)
-
sep :=sep_size 공백 수
-
text_array - 1의 각 i에 대해 수행
-
res :=res + i
-
res :=res + sep
-
suff_sp_cnt :=suff_sp_cnt - sep_size
-
-
suff_sp_cnt :=suff_sp_cnt + sep_size
-
res :=왼쪽과 오른쪽에서 여분의 공백 제거
-
res :=res 연결 suff_sp_cnt 끝에 공백 수
-
반환 해상도
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s): res = "" total_sp = s.count(" ") suff_sp_cnt = total_sp text_array = s.split() num_words = len(text_array) if num_words == 1: res = text_array[0] + total_sp * " " return res sep_size = total_sp // (num_words - 1) sep = sep_size * " " for i in text_array: res += i res += sep suff_sp_cnt -= sep_size suff_sp_cnt += sep_size res = res.strip() res += suff_sp_cnt * " " return res s = " I love programming " print(solve(s))
입력
" I love programming "
출력
"I love programming "