建设银行软件官方网站,建个网址需要多少钱,东莞网站建设都找菲凡网络,小红书账号代运营题目描述
本题是leetcode原题#xff1a;字符串压缩 字符串压缩。利用字符重复出现的次数#xff0c;编写一种方法#xff0c;实现基本的字符串压缩功能。比如#xff0c;字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短#xf…题目描述
本题是leetcode原题字符串压缩 字符串压缩。利用字符重复出现的次数编写一种方法实现基本的字符串压缩功能。比如字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短则返回原先的字符串。你可以假设字符串中只包含大小写英文字母a至z。 思路分析
可以考虑使用滑动窗口解决。以aabcccaaa为例指针遍历(部分)过程如下图 思路描述
start,end指针表示滑动窗口的开始和结束位置res表示最终的结果集遍历过程中判断窗口开始和结束位置的元素值是否相等则有以下两种情况
①相等时向后移动结束指针扩大窗口范围
②不相等时将窗口大小结束位置元素依次加入结果集窗口开始指针指向结束指针并向后移动结束指针
代码实现
代码部分就不再赘述了哈直接上Golang代码
func compressString(S string) string {//边界条件(eg:aa,ab)if len(S) 2 {return S}//解法1双指针start,end : 0,1res : string(S[start])for end len(S) {if S[end] ! S[start]{//S[end] ! S[start]时将end-start1放入结果集将S[end]放入结果集start指针指向endres strconv.Itoa(end-start)res string(S[end])start end}end}//将最后遍历元素添加到结果集res strconv.Itoa(end-start)if len(res) len(S){return res}return S
}