列表

详情


面试题 01.06. 字符串压缩

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

 输入:"aabcccccaaa"
 输出:"a2b1c5a3"

示例2:

 输入:"abbccd"
 输出:"abbccd"
 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。

提示:

  1. 字符串长度在[0, 50000]范围内。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string compressString(string S) { } };

golang 解法, 执行用时: 88 ms, 内存消耗: 8.4 MB, 提交时间: 2021-06-22 14:36:50

func compressString(S string) string {
    if S == "" {
        return ""
    }

	n, last, freq := len(S), S[0], 0
	ans := ""
	for i := 0; i < n; i++ {
		if S[i] == last {
			freq++
		} else {
			ans += fmt.Sprintf("%c%d", last, freq)
			last, freq = S[i], 1
		}
	}
	ans += fmt.Sprintf("%c%d", last, freq)
	if len(ans) < n {
        return ans
    }
    return S
}

golang 解法, 执行用时: 92 ms, 内存消耗: 8.4 MB, 提交时间: 2021-06-22 14:32:37

func compressString(S string) string {
    if S == "" {
        return ""
    }

	n, last, freq := len(S), S[0], 1
	ans := S[0:1]
	for i := 1; i < n; i++ {
		if S[i] == last {
			freq++
		} else {
			ans += fmt.Sprintf("%d%c", freq, S[i])
			last, freq = S[i], 1
		}
	}
	ans += fmt.Sprintf("%d", freq)
	if len(ans) < n {
        return ans
    }
    return S
}

上一题