当前位置: 首页 > news >正文

leetcode 1209 学会删除字符串

删除字符串的经典kotlin操作:

val mTemp = (temp.text).replace(Regex("℃"),"")

以下是题目!

1209. 删除字符串中的所有相邻重复项 II

提示

中等

174

相关企业

给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。

你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。

在执行完所有删除操作后,返回最终得到的字符串。

本题答案保证唯一。

示例 1:

输入:s = "abcd", k = 2
输出:"abcd"
解释:没有要删除的内容。

示例 2:

输入:s = "deeedbbcccbdaa", k = 3
输出:"aa"
解释: 
先删除 "eee" 和 "ccc",得到 "ddbbbdaa"
再删除 "bbb",得到 "dddaa"
最后删除 "ddd",得到 "aa"

示例 3:

输入:s = "pbbcggttciiippooaais", k = 2
输出:"ps"

提示:

  • 1 <= s.length <= 10^5
  • 2 <= k <= 10^4
  • s 中只含有小写英文字母。

通过次数

19.7K

提交次数

38.8K

通过率

50.8%

使用kotlin来解决:

可以使用栈来解决这个问题。

首先定义一个数据类 CharWithCount,用来表示字符和其出现的次数。然后遍历字符串,对于每个字符,如果栈顶元素和当前字符相同,就将栈顶元素出栈,将其出现次数加一,否则将当前字符作为新的元素入栈。每次入栈或者出栈时,要判断栈顶元素出现次数是否达到了 k,如果是的话就将其出栈。

最后将栈中剩余的元素按顺序拼接成字符串即可。

class Solution {data class CharWithCount(val char: Char, var count: Int)fun removeDuplicates(s: String, k: Int): String {val stack = mutableListOf<CharWithCount>()for (c in s) {if (stack.isNotEmpty() && stack.last().char == c) {val last = stack.last()last.count += 1if (last.count == k) {stack.remove(stack.last())}} else {stack.add(CharWithCount(c, 1))}}val sb = StringBuilder()for (c in stack) {sb.append(c.char.toString().repeat(c.count))}return sb.toString()}
}

使用C++来解决:

class Solution {typedef pair<char,int> PSI;
public:string removeDuplicates(string s, int k) {stack<PSI> st;for(auto c:s){if(!st.empty() && st.top().first==c){PSI temp=st.top();temp.second+=1;st.pop();if(temp.second<k){st.push(temp);}}else{st.push({c,1});}}string res="";while(!st.empty()){PSI temp=st.top();st.pop();for(int i=0;i<temp.second;i++){res+=temp.first;}}reverse(res.begin(),res.end());return res;}
};

对比学习着,kotlin的语法确实简洁很多。

http://www.lryc.cn/news/89116.html

相关文章:

  • JavaScript6
  • 轻松安装Redis:不用担心配置问题
  • ChatGPT学习研究总结
  • SpringBoot枚举入参实战
  • Ansible介绍
  • GPT-4的免费使用方法分享
  • 一个产品的诞生
  • MQTT与传统的HTTP协议对比,优势在哪里呢?
  • 热榜!阿里出品2023版Java架构师面试指南,涵盖Java所有核心技能
  • 【小程序】封装时间选择组件:用单元格van-cell和插槽slot,包括起始时间和终止时间
  • 华为OD机试真题B卷 Java 实现【猜密码】
  • 沉淀-MYSQL
  • OJ练习第116题——二进制矩阵中的最短路径(BFS)
  • 2023上半年软件设计师真题评析
  • (汇编) 基于VS的x86汇编基础指令
  • 算法Day16 | 104.二叉树的最大深度,559.n叉树的最大深度, 111.二叉树的最小深度,222.完全二叉树的节点个数
  • java设计模式之责任链设计模式的前世今生
  • 是面试官放水,还是公司太缺人了?华为原来这么容易就进了...
  • PLC/DCS系统常见的干扰现象及判断方法
  • c++ 11标准模板(STL) std::map(四)
  • 6.开源非对称加密算法SM2实现
  • Toolformer and Tool Learning(LLMs如何使用工具)
  • 029:Mapbox GL绘制铁路黑白交替的线段
  • 结对编程 --- 大部分程序员喜欢的编程方式
  • kubernetes-informer机制
  • LeetCode 2451. Odd String Difference【字符串,哈希表】简单
  • 切片工具tippecanoe的全网最详细的解释
  • Linux系统初始化命令的备忘单,Linux运维工程师收藏!
  • 五月最近一次面试,被阿里P8测开虐惨了...
  • 工业机器视觉缺陷检测工作小结