題目:字符串壓縮
字符串壓縮药薯。利用字符重復出現(xiàn)的次數薄料,編寫一種方法,實現(xiàn)基本的字符串壓縮功能仍源。比如心褐,字符串aabcccccaaa
會變?yōu)?code>a2b1c5a3。若“壓縮”后的字符串沒有變短笼踩,則返回原先的字符串逗爹。你可以假設字符串中只包含大小寫英文字母(a至z)。
示例1:
輸入:"aabcccccaaa"
輸出:"a2b1c5a3"
示例2:
輸入:"abbccd"
輸出:"abbccd"
解釋:"abbccd"壓縮后為"a1b2c2d1"嚎于,比原字符串長度更長掘而。
提示:
- 字符串長度在[0, 50000]范圍內挟冠。
思路
- 遍歷字符串數組,一個遍歷記錄當前壓縮的字符袍睡,一個變量記錄數量知染。
實現(xiàn)
func compressString(S string) string {
if len(S) == 0 {
return S
}
var (
ans []byte
count = 1
cur = S[0]
)
for i := 1; i < len(S); i++ {
if S[i] == cur {
count++
} else {
ans = append(ans, cur)
ans = append(ans, strconv.Itoa(count)...)
cur = S[i]
count = 1
}
}
ans = append(ans, cur)
ans = append(ans, strconv.Itoa(count)...)
if len(ans) >= len(S) {
return S
}
return string(ans)
}