LeetCode 443. 压缩字符串(双指针)

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(vector<char>& 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的位置就是新数组的长度}
};

在这里插入图片描述

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

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

相关文章

程序员在体制内的工作与生活是怎样的?

文 | 森林鱼&#xff08;转载于公众号&#xff1a;森林鱼的时光&#xff09;前言这篇文章原本是要在公众号上更新的&#xff0c;但考虑到修改问题&#xff0c;还是放在了这边。公众号那边会放一个最终相对完整的版本&#xff0c;日常更新与整理的话还是会在这边。主要是想尽量客…

开源开放 | 一个用于文言文实体识别与关系抽取等任务的开源数据集C-CLUE(CCKS2021)...

OpenKG地址&#xff1a;http://openkg.cn/dataset/c-clueGitHub地址&#xff1a;https://github.com/jizijing/C-CLUE网站地址&#xff1a;http://152.136.45.252:60002/pages/login.html开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&…

谷歌:一篇论文,让研究者吃我三份安利

文 | 白鹡鸰想用Transformer做CV编 | 小轶想用Transformer做NLP前言计算机视觉、机器学习&#xff0c;这两个词会让你想到什么&#xff1f;相信绝大多数人第一反应都是CNN&#xff0c;而持续关注这些领域发展的人&#xff0c;则会进一步联想到近几年大火的Transformer&#xff…

LeetCode 290. 单词规律(哈希)

1. 题目 给定一种规律 pattern 和一个字符串 str &#xff0c;判断 str 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern "abba&q…

开源开放 | 一个用于知识驱动的零样本学习研究的开源数据集KZSL(CCKS2021)

OpenKG地址&#xff1a;http://openkg.cn/dataset/k-zslGitHub地址&#xff1a;https://github.com/China-UK-ZSL/Resources_for_KZSL开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;浙江大学(耿玉霞、陈卓、陈华钧)&#xff0c…

LeetCode 1022. 从根到叶的二进制数之和(递归)

1. 题目 给出一棵二叉树&#xff0c;其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如&#xff0c;如果路径为 0 -> 1 -> 1 -> 0 -> 1&#xff0c;那么它表示二进制数 01101&#xff0c;也就是 13 。 对树上的每一…

别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!

文 | Yimin_饭煲编 | 炼丹学徒如果评选NLP圈的2020年度十大关键词&#xff0c;那么GPT-3&#xff08;Language Models are Few shot Learners) 一定榜上有名。GPT-3庞大的参数量&#xff0c;优异的性能至今仍让圈内圈外人都津津乐道&#xff0c;而OpenAI发布的OpenAI API&#…

大数据:任务调度,手把手教你

大数据&#xff1a;任务调度https://blog.csdn.net/qq_43713049/article/details/116985497 文章目录 任务调度一、任务流调度的需求二、任务流调度的工具三、Oozie的简介四、Oozie的2种使用方式五、WorkFlow 与 Fork 和 Join六、SubFlow&#xff1a;子工作流七、定时调度的实现…

人脸识别 | 你的论文离CVPR , 还有多远?

最近&#xff0c;一则人脸识别安全性问题的新闻上了热搜。&#xff08;图片来自网络&#xff09;虽然让不少人产生了“人在家中坐&#xff0c;债从天上来”的担忧&#xff0c;但也不由感叹人脸识别的发展与普及。人脸识别发展至今&#xff0c;已经在众多领域中占领重要地位。这…

LeetCode 455. 分发饼干(贪心)

1. 题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i &#xff0c;都有一个胃口值 gi &#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j &#xff0c;都有一个尺…

开源开放 | 高质量体育赛事摘要数据集SGSum(CCKS2021)

OpenKG地址&#xff1a;http://openkg.cn/dataset/sgsumGitHub&#xff1a;https://github.com/krystalan/SGSum开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;苏州大学&#xff08;王佳安、张汀依、瞿剑峰、李直旭&#xff09…

消息队列设计精要

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&#xff0c;炙手可热的Kafka&#x…

数学教育中的AI:NeurIPS’21 Workshop 欢迎投稿!

Workshop主页&#xff1a;https://mathai4ed.github.io数学推理是一种人类独特的智慧能力&#xff0c;也是人类在对科学和知识的探寻道路上不可缺少的基石。不过&#xff0c;数学学习通常是一项极具挑战性的过程&#xff0c;因为它依赖于指导者对学习内容的设计、教学和评估。从…

LeetCode 696. 计数二进制子串

1. 题目 给定一个字符串 s&#xff0c;计算具有相同数量0和1的非空(连续)子字符串的数量&#xff0c;并且这些子字符串中的所有0和所有1都是组合在一起的。 重复出现的子串要计算它们出现的次数。 示例 1 : 输入: "00110011" 输出: 6 解释: 有6个子串具有相同数量…

论文浅尝 - ISWC2021 | 当知识图谱遇上零样本视觉问答

论文题目&#xff1a;Zero-shot Visual Question Answering using Knowledge Graph本文作者&#xff1a;陈卓(浙江大学)、陈矫彦(牛津大学)、耿玉霞(浙江大学)、Jeff Z. Pan(爱丁堡大学)、苑宗港(华为)、陈华钧(浙江大学)发表会议&#xff1a;ISWC 2021论文链接&#xff1a;htt…

Java 8系列之重新认识HashMap

HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK&#xff08;Java Developmet Kit&#xff09;版本的更新&#xff0c;JDK1.8对HashMap底层的实现进行了优化&#xff0c;例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别&…

LeetCode 1042. 不邻接植花(图的数据结构)

1. 题目 有 N 个花园&#xff0c;按从 1 到 N 标记。在每个花园中&#xff0c;你打算种下四种花之一。 paths[i] [x, y] 描述了花园 x 到花园 y 的双向路径。 另外&#xff0c;没有花园有 3 条以上的路径可以进入或者离开。 你需要为每个花园选择一种花&#xff0c;使得通…

我用Transformer修复代码bug

源&#xff1a;机器之心本地化 Bug 并修复程序是软件开发过程中的重要任务。在本篇论文中&#xff0c;来自微软 CloudAI 部门的研究者介绍了 DeepDebug&#xff0c;一种使用大型预训练模型 transformer 进行自动 debug 的方法。首先&#xff0c;研究者基于 20 万个库中的函数训…

论文浅尝 | 一种基于递归超图的知识图谱问答方法

笔记整理 | 谭亦鸣&#xff0c;东南大学博士生来源&#xff1a;EACL’21链接&#xff1a;https://www.aclweb.org/anthology/2021.eacl-main.35.pdf概述与动机本文提出了一种基于递归超图的知识图谱问答方法RecHyperNet&#xff0c;作者认为人回答问题时倾向于在推理过程中递归…

模拟登录——添加cookies,使用postmanget请求网页数据

摘要&#xff1a; 在进行爬虫时&#xff0c;除了常见的不用登录就能爬取的网站&#xff0c;还有一类需要先登录的网站。比如豆瓣、知乎&#xff0c;以及上一篇文章中的桔子网。这一类网站又可以分为&#xff1a;只需输入帐号密码、除了帐号密码还需输入或点击验证码等类型。本文…