3039. 进行操作使字符串为空

简介: 3039. 进行操作使字符串为空

说在前面

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

题目描述

给你一个字符串 s

请你进行以下操作直到 s

  • 每次操作 依次 遍历 'a''z',如果当前字符出现在 s 中,那么删除出现位置 最早 的该字符。

请你返回进行 最后 一次操作 之前 的字符串 s

示例 1:

输入: s = "aabcbbca"
输出: "ba"
解释: 我们进行以下操作:
- 删除 s = "aabcbbca" 中加粗加斜字符,得到字符串 s = "abbca" 。
- 删除 s = "abbca" 中加粗加斜字符,得到字符串 s = "ba" 。
- 删除 s = "ba" 中加粗加斜字符,得到字符串 s = "" 。
进行最后一次操作之前的字符串为 "ba" 。

示例 2:

输入: s = "abcd"
输出: "abcd"
解释: 我们进行以下操作:
- 删除 s = "abcd" 中加粗加斜字符,得到字符串 s = "" 。
进行最后一次操作之前的字符串为 "abcd" 。

提示:

  • 1 <= s.length <= 5 * 10^5
  • s 只包含小写英文字母。

解题思路

首先创建一个空对象 map,用于记录字符串中每个字符出现的次数。同时初始化变量 max 为 0,用于记录最大的字符出现次数。

接下来使用一个循环遍历字符串 s,对每个字符进行处理。在循环中,将当前字符 s[i] 作为键,将其在 map 对象中的值加 1,并更新 max 的值为当前字符出现次数和 max 的较大值。

然后,根据 map 对象中的字符出现次数,倒序遍历字符串 s。如果当前字符的出现次数等于 max,则将该字符从 map 对象中删除,并将该字符加到结果字符串 str 的前面。

最后,返回结果字符串 str。

该算法的时间复杂度为 O(n),其中 n 是字符串 s 的长度。它需要遍历两次字符串,一次用于统计字符出现次数,一次用于构建结果字符串。空间复杂度取决于字符串中不同字符的数量,为 O(k),其中 k 是字符串中不同字符的数量。

AC代码

/**
 * @param {string} s
 * @return {string}
 */
var lastNonEmptyString = function (s) {
  const map = {};
  let max = 0;
  for (let i = 0; i < s.length; i++) {
    map[s[i]] = (map[s[i]] || 0) + 1;
    max = Math.max(max, map[s[i]]);
  }
  let str = "";
  for (let i = s.length - 1; i >= 0; i--) {
    let k = s[i];
    if (map[k] === max) {
      delete map[k];
      str = k + str;
    }
  }
  return str;
};

公众号

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

说在后面

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

目录
相关文章
|
SQL 算法 前端开发
技术分享-动态脱敏
数据脱敏(Data Masking),又称数据混淆、数据漂白、数据去隐私化。用虚假的数据掩饰真实数据,以达到防止数据泄漏的目的。
1089 21
|
网络协议 网络架构
什么是BGP机房?3分钟全面了解BGP机房
购买服务器最常见的术语就是BGP机房,什么是BGP机房?BGP机房有什么特点?服务器百科网带你3分钟全面了解BGP机房: 什么是BGP机房? 在了解BGP机房之前服务器百科网带大家先了解下BGP,BGP是指边界网关协议(Border Gateway Protocol),BGP是运行于TCP上的一种自治系统(AS)的路由协议,是能够妥善处理不相关路由域间的多路连接的协议。
14393 2
|
安全 数据处理 索引
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
407 9
|
监控 前端开发 UED
理解 MVVM 中的数据双向绑定
【10月更文挑战第21天】数据双向绑定是 MVVM 架构中的一个核心特性,它为前端开发带来了诸多便利和优势。理解并熟练运用数据双向绑定,有助于我们构建更加高效、交互性更强的应用程序。同时,我们也需要在实际应用中注意性能和复杂性等方面的问题,以确保应用的良好运行和用户体验。还可以结合具体的项目经验和实际案例,进一步深入探讨数据双向绑定在不同场景下的应用和优化策略。
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
传感器
SFNC —— 采集控制(四)(中)
SFNC —— 采集控制(四)
722 4
|
数据格式
串口通信知识点总结
串口通信知识点总结
608 0
解决ERROR in Conflict: Multiple assets emit different content to the same filename index.html 的问题
解决ERROR in Conflict: Multiple assets emit different content to the same filename index.html 的问题
1805 0
|
安全 前端开发 JavaScript
【BP靶场portswigger-客户端13】跨来源资源共享(CORS)-4个实验(全)(上)
【BP靶场portswigger-客户端13】跨来源资源共享(CORS)-4个实验(全)(上)
743 0
【BP靶场portswigger-客户端13】跨来源资源共享(CORS)-4个实验(全)(上)
|
NoSQL IDE Linux
【Linux C】GCC编译 && GDB调试 从入门到放弃 (gcc调试选项详解、gdb调试、条件断点、远程调试、脚本化调试)(一)
阅读本文可能需要一些基础,比如:C语言基础、Linux基础操作、vim、防火墙等。篇幅有限,本文讲的“比较浅显”。 通过本文你将学会: gcc编译 gdb调试

热门文章

最新文章

下一篇
开通oss服务