(Good topic)压缩字符串 (3.16 leetcode每日打卡)
输出:"a2b1c5a3"
示例2:
输出:"abbccd"
解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
提示:
1.首先int型转化为char型 需要整型+48然后强制类型转换
2.然后运行不对,原因就是没有初始化定义的压缩数组,于是全部初始为'0',要养成初始化数组的好习惯
3.结果仍然不对,上编译器调试,于是发现字符串末尾需要用'\0'截断,不然会出现乱码
4.然后个数小于十的通过了,依然不对,原因就是因为还有个数是多位数的,数字的长度不仅仅是小于10,想了好久该怎样把大于十的整型放入字符串,于是我用了itoa函数,没想到出现编译错误,上网上查了一下是因为itoa是window特有的,于是改为了sprintf函数
5.我想这下总该对了,错误,原因就是压缩后的字符串可能比50000还长,这个是一开始没有想到的,于是改成了500000
1 char* compressString(char* S)
2 {
3 int i, len;
4 int cnt = 1;
5 int j = -1;
6 char dealS[500000];
7 memset(dealS, '0', 500000);
8
9 char ch = S[0];
10 for (i = 0; S[i]; i++); //测量长度 其实可以用strlen
11 len = i;
12 if (len == 1)
13 return S;
14 for (i = 1; i < len+1; i++) //len+1是为了防止还没等压缩就因为到了末尾而跳出遍历了了
15 {
16 if (ch == S[i])
17 {
18 cnt++;
19 }
20 else
21 {
22 dealS[++j] = ch;
23 if (cnt < 10) //判断计数器大于还是小于0
24 {
25 dealS[++j] = (char)(cnt + 48);
26 }
27 else
28 {
29 char buffer[25];
30 sprintf(buffer, "%d", cnt);
31 for (int k = 0; buffer[k]; k++)
32 {
33 dealS[++j] = buffer[k];
34 }
35 }
36
37 ch = S[i];
38 i--;
39 cnt = 0;
40 }
41 }
42
43 dealS[++j] = '\0';
44 return strlen(dealS) < strlen(S) ? dealS : S;
45 }
(Good topic)压缩字符串 (3.16 leetcode每日打卡)的更多相关文章
- (leetcode每日打卡)秋叶收藏集【动态规划】
LCP 19.秋叶收藏集 题目链接 算法 动态规划 时间复杂度O(n) 1.题目要求最终形成[红.黄.红]三部分,每部分数量可以不相等,问最终调整操作数量最小是多少.这道题一开始考虑暴力去做,枚举两个 ...
- [LeetCode] Design Compressed String Iterator 设计压缩字符串的迭代器
Design and implement a data structure for a compressed string iterator. It should support the follow ...
- 【python】Leetcode每日一题-扰乱字符串
[python]Leetcode每日一题-扰乱字符串 [题目描述] 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 > 1 ,执行 ...
- Java实现 LeetCode 443 压缩字符串
443. 压缩字符串 给定一组字符,使用原地算法将其压缩. 压缩后的长度必须始终小于或等于原数组长度. 数组的每个元素应该是长度为1 的字符(不是 int 整数类型). 在完成原地修改输入数组后,返回 ...
- 【JavaScript】【dp】Leetcode每日一题-解码方法
[JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...
- 【JavaScript】【KMP】Leetcode每日一题-实现strStr()
[JavaScript]Leetcode每日一题-实现strStr() [题目描述] 实现 strStr() 函数. 给你两个字符串 haystack 和 needle ,请你在 haystack 字 ...
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- 【python】Leetcode每日一题-最大数
[python]Leetcode每日一题-最大数 [题目描述] 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你需要返回一个 ...
- 【python】Leetcode每日一题-最长公共子序列
[python]Leetcode每日一题-最长公共子序列 [题目描述] 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . ...
- 【python】Leetcode每日一题-颠倒二进制位
[python]Leetcode每日一题-颠倒二进制位 [题目描述] 颠倒给定的 32 位无符号整数的二进制位. 示例1: 输入: 00000010100101000001111010011100 输 ...
随机推荐
- 【go语言】2.1.3 函数的定义和使用
在 Go 语言中,函数是一种代码抽象和复用的方式.函数可以接受参数,执行特定的操作,并返回结果. 函数的定义 函数的定义以 func 关键字开始,后面跟着函数名.参数列表.返回值列表(可选)以及函数体 ...
- 修改启动配置文件更改root密码
第二种:修改启动配置文件 (1)进入救援模式 开机选择第一个系统内核,键入e (2)修改配置文件 将光标移动linux 开始的行,添加内核参数 rd.break 按ctrl-x启动 光标放在linux ...
- Windows 虚拟地址 到底是如何映射到 物理地址 的?
一:背景 1. 讲故事 我发现有很多的 .NET程序员 写了很多年的代码都没弄清楚什么是 虚拟地址,更不用谈什么是 物理地址 以及Windows是如何实现地址映射的了?这一篇我们就来聊一聊这两者之间的 ...
- OpenLDAP 自助修改密码系统
一.创建docker-compose文件 root@xx:~# mkdir self-service-password root@xx:~# cd self-service-password root ...
- (洛谷P4213)杜教筛
https://www.cnblogs.com/Mychael/p/8744633.html #pragma GCC optimize(3, "Ofast", "inli ...
- 搭建企业知识库:基于 Wiki.js 的实践指南
一.简介 在当今知识经济时代,企业知识库的建设变得越来越重要.它不仅有助于企业知识的沉淀和共享,还能提升员工的工作效率,促进企业的创新发展.企业知识库是企业中形成结构化文档,共享知识的集群,可以促进企 ...
- C++算法之旅、06 基础篇 | 第四章 动态规划 详解
常见问题 闫式DP分析法 状态表示 集合 满足一定条件的所有方案 属性 集合(所有方案)的某种属性(Max.Min.Count等) 状态计算(集合划分) 如何将当前集合划分成多个子集合 状态计算相当于 ...
- linux上搭建Nacos集群(步骤详细,linux小白也能搞定)
(1)nacos官网:https://github.com/alibaba/nacos/releases/tag/1.2.1下载nacos安装包到window本地(后缀为tar.zip) (2)在li ...
- PLC通过Modbus转Profinet网关与合康变频器Modbus通讯案例
PLC通过Modbus转Profinet网关(XD-MDPN100)与合康变频器Modbus通讯,实现了两个设备之间的数据交互.Profinet是一种基于以太网的实时工控网络协议,而Modbus是一种 ...
- C语言指针函数和函数指针区别(转)
C语言函数指针和指针函数的区别C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址. 指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是 ...