当前位置:网站首页>【C语言刷LeetCode】443. 压缩字符串(M)
【C语言刷LeetCode】443. 压缩字符串(M)
2022-07-19 01:34:00 【kinbo88】
【
给你一个字符数组 chars ,请使用下述算法压缩:
从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :
如果这一组长度为 1 ,则将字符追加到 s 中。
否则,需要向 s 追加字符,后跟这一组的长度。
压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。
请在 修改完输入数组后 ,返回该数组的新长度。
你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
示例 1:
输入:chars = ["a","a","b","b","c","c","c"]
输出:返回 6 ,输入数组的前 6 个字符应该是:["a","2","b","2","c","3"]
解释:"aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"ccc" 被 "c3" 替代。
示例 2:
输入:chars = ["a"]
输出:返回 1 ,输入数组的前 1 个字符应该是:["a"]
解释:唯一的组是“a”,它保持未压缩,因为它是一个字符。
示例 3:
输入:chars = ["a","b","b","b","b","b","b","b","b","b","b","b","b"]
输出:返回 4 ,输入数组的前 4 个字符应该是:["a","b","1","2"]。
解释:由于字符 "a" 不重复,所以不会被压缩。"bbbbbbbbbbbb" 被 “b12” 替代。
提示:
1 <= chars.length <= 2000
chars[i] 可以是小写英文字母、大写英文字母、数字或符号
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/string-compression
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
】
1. 又一次理解错题意了,压缩后字符串需要转存到字符数组chars中,以为只要返回长度就行
2. 123->'1','2','3',用了临时数组先存,然后再逆序+'0'存到newarr中,这个操作有些繁琐
3. 最后一个字符的次数不要漏了
4. 次数1是个陷阱
int idx;
int Getcntnum(int cnt, char *newarr)
{
int ret = 0;
int arr[2000] = {0};
int ti = 0;
if (cnt == 1) { // 如果是1,直接退出
return 0;
}
while(cnt) {
int tmp = cnt % 10;
arr[ti++] = tmp; // 把数字拆解逆序存进数组
cnt = cnt / 10;
ret++;
}
for (int i = ti - 1; i >= 0; i--) {
newarr[idx++] = arr[i] + '0'; // 变成字符存进newarr
}
return ret;
}
int compress(char* chars, int charsSize){
int i;
int ret = 1;
int cnt = 1;
int num;
char *newarr = (char *)malloc(sizeof(char) * charsSize);
idx = 0;
memset(newarr, 0, sizeof(char) * charsSize);
newarr[idx++] = chars[0];
for (i = 1; i < charsSize; i++) {
if (chars[i] == chars[i - 1]) {
cnt++; // 字符出现次数
} else {
num = Getcntnum(cnt, newarr); // 得到次数的占位数
newarr[idx++] = chars[i];
cnt = 1; // 次数初始化为1;
}
}
num = Getcntnum(cnt, newarr); // 最后一个字符的次数不要漏了
memcpy(chars, newarr, sizeof(char) * charsSize);
return idx;
}
/*
总结点:
1. 理解错题意了,压缩后字符串需要转存到字符数组chars中,以为只要返回长度就行
2. 123->'1','2','3',用了临时数组先存,然后再逆序+'0'存到newarr中
3. 最后一个字符的次数不要漏了
4. 次数1是个陷阱
*/
边栏推荐
- 云主机内网通信ping不通问题处理过程
- II - 01day: object index understanding, this point on the object, object conversion to string, function pre parsing, arguments The usage of callee,
- 使用 My SQL Server 实现数据科学的 SQL 查询教程
- &lt;/script&gt;&lt;script&gt;console.log(7890)-{&quot; xxx&quot; :&quot; aaa
- 个人开发的解ctf usb的键盘流量的工具 KeyboardTraffic
- 【自校正控制】递推最小二乘法
- ReplicaSet
- C语言基础Day4-函数笔记
- 19.3 - > 19.12 patching is interrupted. How to continue?
- js 获取两个时间段的时间组成数组
猜你喜欢
随机推荐
Iterators and generators (ES6)
NahamCon CTF 2022 Babyrev逆向分析
每日刷题记录 (二十七)
[leetcode daily question] - 109 Ordered linked list transformation binary search tree
DOM operation of JS -- element box model
【 XXL-JOB】XXL-JOB学习
codeforces每日5题(均1500)-第十九天
Daily question brushing record (XXVII)
fuser和lsof的用法
[translation] introduce OPTA. Terrain on rails
Is the mobile account opening process of CITIC Securities safe? How to open a VIP account
468-82(142、199、509、70、746)
Using my SQL server to realize SQL query tutorial of data science
autojs云控源码+展示
软链接和硬链接区别
Based on yarn1 Sharing of monorepo practice of X
JS的DOM操作——事件
二分查找 33. 搜索旋转排序数组
WTO officially announced that sun Yuchen's MC12 speech covered major topics such as e-commerce
19.3 -> 19.12 打补丁中断了如何继续?