import scala.StringBuilder
/**
* Created by kwo2002 on 2015-08-03.
*/
object ZipString {
def zipString(str: String): String = {
def go(n: Int, cnt: Int, zipString: StringBuilder): String = {
if (cnt == 1) {
zipString.append(str.charAt(n))
}
if (n >= str.length - 1) {
zipString.append(cnt)
zipString.toString()
} else {
if (str.charAt(n) == str.charAt(n + 1)) {
go(n + 1, cnt + 1, zipString)
} else {
zipString.append(cnt)
go(n + 1, 1, zipString)
}
}
}
val zipStr: String = go(0, 1, new StringBuilder)
if (zipStr.length >= str.length) {
str
} else {
zipStr
}
}
def main(args: Array[String]) {
println(zipString("aaabccddeeeffffffffffffffffffffffffe"))
}
}
1. 문자가 1개이더라도 압축문자열에 1 포함시키도록 수정.
2. 압축된 문자열이 원래 문자열에 비해 크거나 같으면 원래 문자열을, 아니면 압축된 문자열을 리턴하는 조건 추가