def zipString2(str: String): String = {
def go(i: Int, li: Int, cnt: Int, zipStr: StringBuilder): String = {
if (i >= str.length) {
zipStr.append(str.charAt(li))
zipStr.append(cnt)
zipStr.toString()
} else {
if (str.charAt(li) == str.charAt(i)) {
go(i + 1, li, cnt + 1, zipStr)
} else {
zipStr.append(str.charAt(li))
zipStr.append(cnt)
go(i + 1, i, 1, zipStr)
}
}
}
val zipStr: String = go(1, 0, 1, new StringBuilder)
if (zipStr.length >= str.length) {
str
} else {
zipStr
}
}
다른방법으로 구현해봄.
회고
1. 문자 압축을 하기전에 우선, 압축 문자열의 길이와 원래 문자열의 길이를 비교하고 압축을 할지 말지 결정하면 나은 성능이 나올것이다.