1544. 整理字符串

简介: 1544. 整理字符串

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给你一个由大小写英文字母组成的字符串 s

一个整理好的字符串中,两个相邻字符 s[i]s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件:

  • s[i] 是小写字符,则 s[i+1] 不可以是相同的大写字符。
  • s[i] 是大写字符,则 s[i+1] 不可以是相同的小写字符。

请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。

请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。

注意: 空字符串也属于整理好的字符串,尽管其中没有任何字符。

示例 1:

输入: s = "leEeetcode"
输出: "leetcode"
解释: 无论你第一次选的是 i = 1 还是 i = 2,都会使 "leEeetcode" 缩减为 "leetcode" 。

示例 2:

输入: s = "abBAcC"
输出: ""
解释: 存在多种不同情况,但所有的情况都会导致相同的结果。例如:
"abBAcC" --> "aAcC" --> "cC" --> ""
"abBAcC" --> "abBA" --> "aA" --> ""

示例 3:

输入: s = "s"
输出: "s"

提示:

  • 1 <= s.length <= 100
  • s 只包含小写和大写英文字母

解题思路

具体实现是通过使用一个数组 res 来模拟栈的行为,遍历字符串 s。对于每个字符,将其与栈顶元素进行比较。如果它们相邻且字符之间的大小写关系满足 Math.abs(s[i].charCodeAt() - res[res.length - 1].charCodeAt()) === 32,即它们的 ASCII 码差值为 32(表示大小写字母之间的关系),则将栈顶元素弹出,并继续比较下一对相邻字符。否则,将当前字符加入到栈中。最后,将栈中的元素转换为字符串并返回。

这段代码的时间复杂度为 O(n),其中 n 是字符串的长度。

AC代码

/**
 * @param {string} s
 * @return {string}
 */
var makeGood = function(s) {
    let res = [s[0]];
    for(let i = 1; i < s.length; i++){
        while(res.length && i < s.length && Math.abs(s[i].charCodeAt() - res[res.length - 1].charCodeAt()) === 32){
            res.pop();
            i++;
        }
        if(i < s.length) res.push(s[i]);
    }
    return res.join('');
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
Java 应用服务中间件 Maven
Servlet初识—编写hello world+使用smart Tomcat插件部署(二)
Servlet初识—编写hello world+使用smart Tomcat插件部署
Servlet初识—编写hello world+使用smart Tomcat插件部署(二)
|
11月前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
1395 2
|
11月前
|
安全 Java 测试技术
如何在 Spring Boot 中禁用 Actuator 端点安全?
如何在 Spring Boot 中禁用 Actuator 端点安全?
2078 1
|
存储 Docker 容器
containerd容器运行时快速入门使用指南
关于containerd容器运行时的快速入门使用指南,涵盖了镜像管理、容器管理、NameSpace管理、数据持久化、镜像推送至Harbor仓库以及Docker与Containerd集成等内容。
1183 1
containerd容器运行时快速入门使用指南
|
小程序 JavaScript Java
【Java】服务CPU占用率100%,教你用jstack排查定位
本文详细讲解如何使用jstack排查定位CPU高占用问题。首先介绍jstack的基本概念:它是诊断Java应用程序线程问题的工具,能生成线程堆栈快照,帮助找出程序中的瓶颈。接着,文章通过具体步骤演示如何使用`top`命令找到高CPU占用的Java进程及线程,再结合`jstack`命令获取堆栈信息并进行分析,最终定位问题代码。
1359 2
【Java】服务CPU占用率100%,教你用jstack排查定位
|
存储 网络协议 Java
Tomcat详解(十)——Tomcat性能调优
Tomcat详解(十)——Tomcat性能调优
439 1
|
Java 应用服务中间件 Apache
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
本文介绍了在IntelliJ IDEA中修改Web项目访问路径的步骤,包括修改项目、模块、Artifacts的配置,编辑Tomcat服务器设置,以及解决Apache Tomcat控制台中文乱码问题的方法。
873 0
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
|
算法 安全 Java
Hutool-crypto 加密、解密详解!
Hutool-crypto 加密、解密详解!
1094 0
|
算法 安全 Java
浅析五种最常用的Java加密算法,以后可以直接拿来用了
信息加密是现在几乎所有项目都需要用到的技术,身份认证、单点登陆、信息通讯、支付交易等场景中经常会需要用到加密算法,所谓加密算法,就是将原本的明文通过一系列算法操作变成密文。接下来就介绍一下目前比较常用的一些加密算法,本期不涉及算法底层,以应用介绍和代码展示为主。 如果只想了解原理,可跳过代码部分,代码可直接拿来使用。
2976 0
|
应用服务中间件 Java Maven
IntelliJ IDEA Community 社区版 Tomcat 插件
IntelliJ IDEA Community 社区版默认没有像旗舰版的 Tomcat 启动配置,那么社区版如何集成 Tomcat 呢?
1390 0
IntelliJ IDEA Community 社区版 Tomcat 插件