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

news2024/9/30 9:30:46

在这里插入图片描述

字符串压缩

  • 字符串压缩
    • 思路一(双指针顺畅版)
    • 思路二(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.coloradmin.cn/o/1407260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV第 2 课 OpenCV 环境搭建

文章目录 第 2 课 OpenCV 环境搭建1.安装 Numpy2.从 Ubuntu 存储库安装 OpenCV3.验证 OpenCV 安装 第 2 课 OpenCV 环境搭建 1.安装 Numpy 每一张图像都有很多个像素点&#xff0c;这也导致了程序中会涉及大量的数组处理。Numpy 是一个 Python 的拓展库&#xff0c;它对多维数…

Linux环境docker安装Neo4j,以及Neo4j新手入门教学(超详细版本)

目录 1、 图数据库Neo4j简介1.1 什么是图数据库1.2 能解决什么痛点1.3 对比关系型数据库1.4 什么是Neo4j1.5 Neo4j的构建元素 2. 环境搭建2.1 安装Neo4j Community Server2.2 docker 安装Neo4j Community Server2.3 Neo4j Desktop安装 3. Neo4j - CQL使用3.1 Neo4j - CQL简介3.…

C++模板与STL【常用算法】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f384;1 STL常用算法&#x1f3c6;1.1 常用遍历算法&#x1f349;1.1.1 for_each&#x1f349;1.1.2 transform &#x1f3c6;1.2 常用查找算法&#x1f34b;1.2.1 f…

STL第二讲

第二讲 视频标准库源码版本&#xff1a;gnu c 2.9.1/4.9/Visual C OOP vs GP GP是将datas与methods分开&#xff0c;OOP相反&#xff1b; 为什么list不能使用全局的sort&#xff1f; 因为sort源代码&#xff1a; *(first (last - first)/2) // 此迭代器只能是随机访问迭代…

C语言快速排序(非递归)图文详解

前言&#xff1a; 上一期分析了快速排序的三种写法&#xff0c;这三种写法有一个相同点&#xff0c;都是采用递归形式来实现的&#xff0c;那么有没有非递归的方法实现呢&#xff1f;答案是当然有&#xff0c;用非递归的方法实现快速排序&#xff0c;其实可以借助数据结构中的栈…

C++笔记(二)

函数的默认参数 如果我们自己传入数据&#xff0c;就用自己的数据&#xff0c;如果没有&#xff0c;就用默认值 语法&#xff1a; 返回值类型 函数名&#xff08;形参默认值&#xff09;{} int func&#xff08;int a&#xff0c;int b20&#xff0c;int c30&#xff09;{} …

HTTP与HTTPS的工作流程

HTTP与HTTPS的工作流程 http知识点回顾1、HTTP访问的过程2、HTTP常见状态码3、HTTP 协议一共五大特点 https的工作流程1、对称加密2、非对称加密3、https工作流程 http知识点回顾 1、HTTP访问的过程 &#xff08;1&#xff09;解析url&#xff0c;获取 url 中包含的域名&…

Unity3D Pico VR 手势识别物体交互 适配 MRTK3

当前Pico已经支持手势识别了&#xff0c;但是提供的PICO Unity Integration SDK 中是没有手势和物体交互的功能&#xff0c;Unity XR Interaction Toolkit提供的手势识别物体交互对 Quest适配的挺好的&#xff0c;Pico 当前只能用指尖点触还不能对物体进行抓握以及手势控制射线…

仅使用 Python 创建的 Web 应用程序(前端版本)第05章_共通代码

前面介绍了很多,但是让我们从本章开始实现 WTS。 在本章中,我们将实现所有页面的公共部分:SessionManager、MockDB、Model 和 Application。 SessionManger 与 Streamlit 会话交互。 在WTS中,我们的目标是使代码清晰,SessionManager负责读写st.session_state数据。 Mock…

数据结构:3_栈和队列

栈和队列 一.栈 1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。**栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#x…

【QML-Qt Design Studio】

QML编程指南 ■ Qt Design Studio &#xff08;Qt Quick UI设计工具&#xff09;■ 安装Qt Design Studio■ ■ Qt Design Studio &#xff08;Qt Quick UI设计工具&#xff09; Qt Design Studio是一个用于创建酷炫、优美UI的工具。 简单概括其功能就是让UI设计转换为qml&…

uniapp+vue3+ts--编写微信小程序对接e签宝签署时跳转刷脸效果(人脸识别)中间页代码

uniappvue3ts–编写微信小程序对接e签宝签署时跳转刷脸效果&#xff08;人脸识别&#xff09;中间页代码 e签宝内嵌H5方式集成签署页的文档说明&#xff1a;https://open.esign.cn/doc/opendoc/case3/ahb0sg 签署时跳转刷脸效果示意图&#xff1a; 1. 在文件夹新建一个文件&a…

java基础:有序数组中插入数字使其依然有序案例分析

问题目标是将用户输入的整数插入到一个已排序的数组中&#xff0c;以保持数组的有序性。 如何实现&#xff1f; 思路分析&#xff1a; 初始化已排序的数组&#xff1a;通过使用int[] arr {1, 2, 3, 4, 5, 6};语句创建一个已经排好序的数组。定义变量&#xff1a;index用于记…

2024年制造业展望

制造业是国民经济的主体&#xff0c;其重要性不言而喻。就2023年而言&#xff0c;制造业在技术创新、数字化转型和可持续发展方面都取得了重要的进展。以下是对于2024年制造业的发展进行的分析与预测。 1 保持业务平衡仍将是一项挑战 在过去的四年里&#xff0c;制造业高管人…

【IEEE会议征稿】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)

2024年第九届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09; 2024年第八届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09;将在西安举行&#xff0c; 会期是2024年4月19-21日&#xff0c; 为期三天, 会议由西安科技大学主办。 欢迎参会&…

Django开发_17_表单类

一、介绍 为了简化前端form表单代码 二、步骤 &#xff08;一&#xff09;创建form.py 创建一个表单类 from django import formsclass RegisterForm(forms.Form):reg_name forms.CharField(max_length10, label用户名)reg_pwd forms.CharField(max_length20, label密码…

【Pandora Next Notebook】

系列文章目录 一是为了说一说这个项目&#xff0c;第二点是为了介绍一下如何使用大善人Cloudflare的功能来配合v0.5.0的新功能。它就是全代理ChatXXX账号注册流程。 文章目录 系列文章目录前言一、[GPT_BOT](https://chat.oaifree.com/)这次借着v0.5.0发布了一个好玩的功能&…

配网故障定位装置:实现高效故障排查的利器

在现代社会&#xff0c;电力系统的稳定运行对于国家经济和民生至关重要。然而&#xff0c;随着电力系统的不断发展&#xff0c;配网故障问题日益严重&#xff0c;给电力系统带来了巨大的安全隐患。为了解决这一问题&#xff0c;恒峰智慧科技研发了一种基于成熟的行波测距技术的…

Vue+OpenLayers7:html原生网页如何使用OpenLayers7地图

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 尽管现在大部分网页都是使用Vue或者React开发了,但是还是有不少开发者使用的是网页原生html进行开发,或者是老项目维护的需要,所以为了照顾使用html原生网页的同学们,本章简单讲解一下如何使用原始html网页情况下…

1. Matplotlib的Figure基础概念

1. Matplotlib的Figure基础概念 一 **角色和作用**二 **类比&#xff1a;**三 **基本使用示例** Matplotlib是一个用于绘制二维图形的Python库&#xff0c;广泛应用于数据可视化领域。其灵活性和强大的功能使得用户能够轻松创建各种类型的图表&#xff0c;包括折线图、散点图、…