做村易通网站站长要收费吗,《网页设计与制作》实验报告,邢台快照优化,产品做网站推广1. 题目
给定一组字符#xff0c;使用原地算法将其压缩。
压缩后的长度必须始终小于或等于原数组长度。
数组的每个元素应该是长度为1 的字符#xff08;不是 int 整数类型#xff09;。
在完成原地修改输入数组后#xff0c;返回数组的新长度。
进阶#xff1a; 你能…1. 题目
给定一组字符使用原地算法将其压缩。
压缩后的长度必须始终小于或等于原数组长度。
数组的每个元素应该是长度为1 的字符不是 int 整数类型。
在完成原地修改输入数组后返回数组的新长度。
进阶 你能否仅使用 O(1) 空间 解决问题
示例 1
输入
[a,a,b,b,c,c,c]
输出
返回6输入数组的前6个字符应该是[a,2,b,2,c,3]
说明
aa被a2替代。bb被b2替代。ccc被c3替代。示例 2
输入
[a]
输出
返回1输入数组的前1个字符应该是[a]
说明
没有任何字符串被替代。示例 3
输入
[a,b,b,b,b,b,b,b,b,b,b,b,b]
输出
返回4输入数组的前4个字符应该是[a,b,1,2]。
说明
由于字符a不重复所以不会被压缩。bbbbbbbbbbbb被“b12”替代。
注意每个数字在数组中都有它自己的位置。注意
所有字符都有一个ASCII值在[35, 126]区间内。
1 len(chars) 1000。来源力扣LeetCode 链接https://leetcode-cn.com/problems/string-compression 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 双指针
一个指针 i 遍历数组一个指针 j 在改写位置等待写入O(1) 空间复杂度
class Solution {
public:int compress(vectorchar chars) {char prev chars[0]; string num ;int i, j 1, k, n chars.size(), count 1;for(i 1; i n; i) {if(chars[i] prev)//跟前面相等{count;//计数1if(i n-1 count ! 1)//是最后一个字符吗{ //只有一个字符的话不需要写数字1while(count)//将计数的每位拆开{num.push_back(count%10);count / 10;}//将每位数字位赋值到原数组for(k num.size()-1; k 0; --k)chars[j] num[k]0;}}else//跟前面不相等{if(count ! 1)//填写数字{while(count){num.push_back(count%10);count / 10;}for(k num.size()-1; k 0; --k)chars[j] num[k]0;num ;//处理好了为下次做准备清空}prev chars[i];chars[j] chars[i];//上面数字填好了该字母了count 1;//计数重置为1个}}return j;//j的位置就是新数组的长度}
};