【刷题】 leetcode 面试题 01.06 字符串压缩

在这里插入图片描述

字符串压缩

  • 字符串压缩
    • 思路一(双指针顺畅版)
    • 思路二(sprintf函数巧解版)
  • Thanks♪(・ω・)ノ谢谢阅读
  • 下一篇文章见!!!

字符串压缩

在这里插入图片描述
来看题目:
根据题目所说,我们需要完成函数书写,保证返回一个相对较小的字符数组:如果压缩后比原字符串小,则返回压缩字符串,否则返回原字符串。

思路一(双指针顺畅版)

本思路一步一步操作,逐步完成任务

  1. 先确认字符串长度是否小于 2 ,小于直接返回(因为压缩字符串长度至少是2
  2. 然后定义双指针和计数位
  3. 开始遍历 : *fast 与 *slow 不相等 则 fast向后移动
  4. 然后记录重复次数
  5. 重复次数分位数进入数组
  6. slow 到 fast 位置 , 计数归零
  7. 重复 3 - 6 直到遍历结束
char* compressString(char* S){int len1 = strlen(S);if(len1<=2) return S;// 双指针char* slow = S;char* fast = S;//记录次数 每个字母至少出现 1 次int count = 1;//开辟一个足够大的数组空间char* ret = (char*)malloc(sizeof(char) * 100001);int i = 0;//开始遍历while(*fast !='\0'){//快指针 后移fast = fast + 1;//向后移动 直到不同while(*fast == *slow){fast++;count++;}//计算位数 方便下面的赋值操作int n = 0;int num = count ;while(num){num /=10;n++;}int n2 = n;// ret 数组赋值ret[i++] = *slow;while(n--) {ret[i + n] = count % 10 + '0' ;count /= 10;}    // 下标后移   i += n2;// 慢指针移动到快指针位置slow = fast;//计数重置count = 1;}//结尾 ‘\0’不能忘记ret[i] = '\0';int len2 = strlen(ret);//返回较小的 字符串 if(len2 < len1) return ret;else return S;
}

思路二(sprintf函数巧解版)

上一步的写入计数的步骤十分繁琐,而使用sprintf函数可以巧妙化解这个问题
因为输入的数据都是 字符 + 数字
在这里插入图片描述
就是可以格式化写入数据

  1. 遍历字符串 记录相同次数
  2. 写入数据
  3. 重复 1 - 2 直到遍历结束
char* compressString(char* S){//字符串长度小于 2 直接返回int len1 = strlen(S);if(len1<=2) return S;char* ret = (char*)malloc(sizeof(char) * 100001);int  count = 1;memset( ret, 0x00, sizeof( ret ));for ( int i = 0; i < strlen( S ); i++ ) {if ( S[i] == S[i+1] ) {//前后相等,计数加1 count++;}else {//若前后不相等,写入数据, 计数器重置sprintf( ret + strlen(ret), "%c%d", S[i], count );count = 1;}}//返回较小字符串int len2 = strlen(ret);if(len2 < len1) return ret;else return S;
}

Thanks♪(・ω・)ノ谢谢阅读

下一篇文章见!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427762.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue实现搜索文字高亮

在日常项目中我们往往会有搜索高亮的需求&#xff0c;下面方法可帮助我们实现&#xff0c;可能不是最优但是可以解决 代码实现 <template><div><el-input v-model"searchText" placeholder"Type a word to highlight" input"changei…

C++补充篇- C++11 及其它特性

目录 explicit 关键字 左值和右值的概念 函数返回值当引用 C11 新增容器 - array C的类型转换 static_cast reinterpret_cast dynamic_cast const_cast C智能指针 auto_ptr 使用详解 (C98) unique_ptr 使用详解 (C11) auto_ptr的弊端 unique_ptr严谨auto_ptr的弊端 unique_…

CSS 楼梯弹弹球

<template><view class="loader"></view> </template><script></script><style>body {background-color: #212121;/* 设置背景颜色为 #212121 */}.loader {position: relative;/* 设置定位为相对定位 */width: 120px;/* 设…

面试题-【消息队列】

消息队列 问题1 如何进行消息队列的技术选型优点解耦 &#xff08;pub/sub模型&#xff09;异步&#xff08;异步接口性能优化&#xff09;削峰 使用消息队列的缺点几种消息队列的特性 问题2 引入消息队列之后该如何保证其高可用性RabbitMQ的高可用kafka高可用 问题3 在消息队列…

mysql 基础(三)

一、多表设计 数据库设计范式 第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值&#xff0c;就说明该数据库表满足了第一范式。第二范式就是要有主键&#xff0c;要求其他字段都依赖于主键。 没有主键就没有唯一性&…

硬件基础:组合逻辑电路

什么是组合逻辑电路 组合逻辑电路是由一些基本的逻辑门电路组成的&#xff0c;没有反馈&#xff0c;输出仅取决于输入。 组合逻辑电路是数字逻辑电路中一种重要的电路类型&#xff0c;它是由多个逻辑门&#xff08;例如与门、或门、非门等&#xff09;组成的电路。组合逻辑电路…

保姆级教程: GPTs接入广告到提现成功全过程真实记录

因为相信&#xff0c;所以看见 &#x1f31f; 1月19日&#xff0c;在AI社群首次了解到GPTs能通过接入广告获得收益。虽然对收益的多少和提现的可行性有所疑问&#xff0c;但我还是立刻在我的GPTs上尝试了这一功能。这一探索的旅程&#xff0c;如同跨入了一个未知的新世界。我的…

live555在拉流时应对多路码流传输带宽问题的几种处理思路

处理带宽管理和调整的机制 Live555库本身并没有直接处理带宽管理和调整的机制&#xff0c;因为它主要是一个用于实现RTSP流媒体服务器和客户端的库&#xff0c;而带宽管理通常是在应用层进行处理的。但Live555支持一些基础协议&#xff0c;这些协议可以在应对带宽问题时进行使用…

[pytorch入门] 6. 神经网络

基本介绍 torch.nn&#xff1a; Containers&#xff1a;基本骨架Convolution Layers&#xff1a; 卷积层Pooling layers&#xff1a;池化层Non-linear Activations (weighted sum, nonlinearity)&#xff1a;非线性激活Normalization Layers&#xff1a;正则化层 Container…

uniapp开发过程一些小坑

问题1、uniapp使用scroll-view的:scroll-into-view“lastChatData“跳到某个元素id时候&#xff0c;在app上不生效&#xff0c;小程序没问题 使用this.$nextTick或者 setTimeout(()>{that.lastChatData 元素id },500) 进行延后处理就可以了。 问题2&#xff1a;uniapp开…

SpringCloud Alibaba Sentinel 与 SpringCloud Gateway 的限流有什么差别?(三种限流算法原理分析)

目录 一、Sentinel 与 Gateway 的限流有什么差别&#xff1f; 1.1、前置知识 - 四种常见的限流算法 1.1.1、Tips 1.1.2、计数器算法 1&#xff09;固定窗口计数器算法 2&#xff09;滑动窗口计数器算法 1.1.3、令牌桶算法 1.1.4、漏桶算法 1.2、解决问题 一、Sentinel…

php低版本(7.4)配置过程中遇到的问题及基本解决手段

目前php不支持较低版本的安装&#xff0c;如果安装低版本必须借助第三方库shivammathur //将第三方仓库加入brewbrew tap shivammathur/php //安装PHPbrew install shivammathur/php/php7.4 可能出现的问题 像这样突然中止然后报错&#xff0c;一般是网络问题&#xff0c;或…