Leetcode1957——删除字符使字符串变好
一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。
给你一个字符串 s
,请你从 s
删除 最少 的字符,使它变成一个 好字符串 。
请你返回删除后的字符串。题目数据保证答案总是 唯一的 。
示例 1:
输入:s = "leeetcode" 输出:"leetcode" 解释: 从第一组 'e' 里面删除一个 'e' ,得到 "leetcode" 。 没有连续三个相同字符,所以返回 "leetcode" 。
示例 2:
输入:s = "aaabaaaa" 输出:"aabaa" 解释: 从第一组 'a' 里面删除一个 'a' ,得到 "aabaaaa" 。 从第二组 'a' 里面删除两个 'a' ,得到 "aabaa" 。 没有连续三个相同字符,所以返回 "aabaa" 。
示例 3:
输入:s = "aab" 输出:"aab" 解释:没有连续三个相同字符,所以返回 "aab" 。
提示:
1 <= s.length <= 10e5
s
只包含小写英文字母。
思路很清晰,字符串长度最长10e5,所以遍历一次,利用计数器去计数,若超过三个则跳过当前字符去找下一个字符,若下一个字符和上一个字符不相同那么计数器就重新计数,遍历一遍即可得到答案。但是当我准备提交的时候发现,竟然超时了(ΩДΩ)!正当我百思不得其解去评论区逛的时候,发现了一个人和我的思路一模一样只是用的方法不太一样,我利用的是字符串的直接拼接,也就是string+string,而他用的是StringBuilder的append方法。于是我把方式也换成了append方法,竟然过了!
后来通过查询其他资料,发现了string+string字符串拼接和StringBuilder的append方法拼接效率是不同的!如果少量的字符串拼接,几乎是不影响的,但是如果需要拼接大量字符串,那么StringBuilder的append方法要比string+string方法的效率要高得多。原因是因为String在进行运算时会产生一个新的实例,而StringBuilder却不会,string+string实质上是将两个字符串写进内存,删除原来的string对象,再创建一个新的string对象,,读取内存中的数据赋给该对象,而Stringbuilder的append方法能够在已有对象的原地进行字符串的修改
有用的知识又增加了!Σ(⊙▽⊙"a