给定一个全是小写字母的字符串str,删除多余字符,使得每种字符只保留一个,并让 最终结果字符串的字典序最小。

双11提前购!买周边/年卡,一键领4重福利! 送200元神券包+10%红包返利+最高10年VIP!还能抽iPhone18Pro!仅限1次,速抢>> 阅读详情

问题描述:

        给定一个全是小写字母的字符串str,删除多余字符,使得每种字符只保留一个,并让最终结果字符串的字典序最小。

【举例】
        str = "acbc",删掉第一个'c',得到"abc",是所有结果字符串中字典序最小的。
        str = "dbcacbca",删掉第一个'b'、第一个'c'、第二个'c'、第二个'a',得到"dabc", 是所有结 果字符串中字典序最小的。

思路

        使用贪心算法思想。

  1. 流程统计每个字符的个数 。
  2. 遍历字符串,每遍历一个字符就在统计的词频表中把该字符的数量减一 。
  3. 当其中某一个字符的数量被减为0时停止遍历,从其实位置开始到结束位置之间选一个 。
  4. 最前的字典序最小的字符作为保留字符,在他之前的字符全部删掉,之后的和他相同的字符也删掉。
  5. 从新进行12步骤直到每个字符都剩一个就找到了字典序最小且无重复字符的字符串。

代码

    public static String remove(String str) {
        if (str == null || str.length() < 2) {
            return str;
        }
        int[] map = new int[256];
        for (int i = 0; i < str.length(); i++) {
            map[str.charAt(i)]++;
        }
        int minACSIndex = 0;
        for (int i = 0; i < str.length(); i++) {
            if (--map[str.charAt(i)] == 0) {
                break;
            } else {
                minACSIndex = str.charAt(minACSIndex) > str.charAt(i) ? i : minACSIndex;
            }
        }
        return String.valueOf(str.charAt(minACSIndex)) +
                remove(str.substring(minACSIndex + 1).
                        replaceAll(String.valueOf(str.charAt(minACSIndex)), ""));
    }

    public static void main(String[] args) {
        String str = "dbcacbca";
        System.out.println(remove(str));
    }

搜狗测试工程师秋招编程题复盘:从字符串处理到二分查找 在算法面试与工程实践中,编程能力不仅体现在思路正确,更取决于对边界条件的敏感度。测试工程师尤其需要这种能力,因为他们在日常工作中要面对各种异常输入与极端场景。以搜狗秋招测试工程师编程题为样本,分析字符串处理、数组操作与二分查找等经典题型的解题逻辑,强调先设计测试用例再写实现的工作流。通过统计字符频率、寻找多数元素、旋转有序数组搜索等具体案例,展示了如何将测试思维融入代码,提升代码的健壮性与面试通过率。同时总结笔试自检清单和常见踩坑点,帮助求职者在算法题中体现专业测试素养。 阅读详情

相关推荐

搜狗后端秋招笔试真题解析:哈希表、堆与DP实战

后端岗位的算法笔试往往不是单纯考察数学推导或偏门技巧,而是注重对哈希表、字符串处理、排序、动态规划等基础数据结构与算法的综合运用,以及代码的健壮性和边界处理能力。从工程实践的角度看,哈希表是空间换时间的典型代表,动态规划则是解决最优化问题的核心方法,而对顶堆和树状数组等进阶结构能高效应对滑动窗口、区间最值等高频场景。本文以搜狗2019秋招后端工程师第二场编程题为例,完整拆解了从读题、数据结构选型到代码实现的全过程,覆盖字符串重排判断、滑动窗口中位数、跳跃得分DP等典型题目,并总结了笔试现场的常见误区与实战策

weixin_33913332的博客 501

超实用的正则验证

package com.android.sdlc.checkterminal.utils; import android.annotation.SuppressLint; import android.text.TextUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.uti.

时代新人的博客 816

Python 基础教学

Python零基础入门课件摘要 Python是一门以可读性为核心的编程语言,语法接近自然语言,适合初学者。本文档为零基础学习者提供系统教程,涵盖以下核心内容: 基础概念 安装与运行 官网下载Python,勾选Add Python to PATH。 两种运行方式:交互式环境(即时调试)和脚本文件(.py文件)。 变量与数据类型 动态类型:变量无需声明类型,直接赋值(如 name = "张三")。 基本类型:整数(int)、浮点数(float)、字符串(str)、布尔值(bool)、None

2501_93504628的博客 552

AttributeError: module ‘dlib‘ has no attribute ‘get_frontal_face_detetor‘

少个字母 get_frontal_face_detetor get_frontal_face_detector

JavaBigData的博客 1617

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1250

Kubernetes集群资源优化实战:Volcano调度器如何帮你省下30%GPU算力

本文详细介绍了如何通过Volcano调度器的Binpack策略优化Kubernetes集群中的GPU资源利用率,解决AI模型训练中的资源碎片化问题。通过实战配置和调优指南,帮助用户提升30%的GPU算力利用率,显著降低任务等待时间和硬件成本。

weixin_30832143的博客 502

给定一个单词,请问在单词中删除t 个字母后,能得到的字典序最小的单词是什么?

给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么?其中,单词长度不超过100 t 小于单词长度。输入的第一行包含一个单词,由大写英文字母组成。第二行包含一个正整数 t。输出一个单词,表示答案。

tianmeg1204的博客 553

我的交叉验证翻车实录:从‘炼丹’到可靠评估,我是怎么用五折验证拯救我的图像分割模型的

本文分享了作者在医学图像分割模型评估中从失败到成功的实战经验。通过引入五折交叉验证方法,解决了传统数据划分的局限性,显著提升了模型评估的稳定性和泛化能力。文章详细介绍了Python实现、数据准备策略和训练流水线改造,为AI医疗影像分析提供了可靠的技术方案。

weixin_42625070的博客 262

字典序问题-字符串去重后字典序最小的子序列

题目给定一个全是小写字母的字符串str, 删除多余字符,使得每种字符只保留一个,并让最终结果的字符串的字典序最小举例str='acbc', 删掉第一个'c', 得到‘abc’,是所有结果字符串中字典序最小的。str='dbcacbca’, 删掉第一个‘b’, 'c', 第二个‘c’,'a', 得到‘dabc’是所有结果字符串中字典序最小的。题目理解:1)每种字符必须保留一个,2)使得保留字符串字典序最小,也就是多余的字符中删减先后顺序,以及开始位置选择的问题。解题思路:首先给所有字符进行词频统计;然后遍历.

Briwisdom的博客 2169

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

作为经典畅销书的升级版,本书在第1版的基础上新增了大量新知识(如闪存、UFS、测试、文件系统等),并改写或删减了许多过时或不适用的内容,总修改量超过60%。本书由SSD技术社区SSDFans的核心团队成员联合业界、高校SSD方面的专家共同完成,相对于第1版,内容更全面、更新,也更有深度。本书从产品、技术和应用3个维度展开,全面、详细讲解了SSD的发展历史、产品形态、工作原理、整体架构,以及各个功能模块的原理和使用,从SSD的前端接口协议到FTL算法,再到后端的闪存和纠错,以及测试,本书都有涉及。

阿玥的小博客 3105

从零开始:使用CMake构建GreenHills RH850项目的完整工作流(2018.1.5版)

本文详细介绍了如何从零开始使用CMake构建GreenHills RH850嵌入式项目的完整工作流。通过编写工具链文件、定义CMakeLists.txt,实现自动化、可维护的跨平台构建,有效解决了传统IDE在多模块、持续集成场景下的局限性,显著提升团队协作效率和项目可维护性。

weixin_28839699的博客 122

(字典序问题) nyoj1542-最小字符串

题目描述: 给你一个由小写字母组成的字符串,最多删除其中一个字符,使其字典序最小。字典序概念在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法。这种泛化主要在于定义有序完全有序集合(通常称为字母表)的元素的序列(通常称为计算机科学中的单词)的总顺序。--百度百科 简单地说就是英文字典上出现的次序 ...

834

6G网络的关键技术、应用前景与挑战并存的科技征途

移动通信技术正以前所未有的速度迭代更新,而6G技术的研发进程渐渐成为了当前科技领域的热点。全球各国已纷纷将目光投向了充满想象的6G时代。本文将探讨全球6G技术研发的最新进展,以及6G技术的核心创新与潜在应用。

fiberroad的博客 2420

前端基础笔记——去重后依旧字典序

* 给一个全是小写字母的字符串str,删除多余字符,使得每种字符只保留一个,并且让最终结果字符串字典序最小。 * 虽然牛客上的通过率很高,但是这不是很简单的题额,需要仔细找出规律 * dbcacbca =>dabc * acbc => abc --- var line=readline().split(''); var flag={index:0,value:line[0]}; va...

一叶的博客 323

Windows Server上OpenVPN 2.4.8双因子认证实战:账号密码+证书,附一键脚本

本文详细介绍了在Windows Server上部署OpenVPN 2.4.8双因子认证(账号密码+证书)的实战方案,包括架构设计、证书体系规划、环境准备、服务器端配置及客户端自动化部署。通过一键脚本和优化配置,提升企业VPN的安全性和运维效率,特别适合金融、医疗等对安全性要求高的行业。

weixin_29231221的博客 454

【unity实战】随机地下城生成3——设置人物移动脚本、动画的切换和摄像机的跟随(含源码)

给房间添加触发器碰撞体,用来判断角色是否进入房间切割人物图片,注意人物每个图片高度可能不同,所有我们需要把轴心调整到人物的底部把人物跑步图片的高度,统一调成20,下面镂空,达到跳跃的效果快速创造人物动画,以人物idle为例,我们选中所有的idle人物图片,拖拽至窗口,unity就会自动生成,并提示保存动画位置别忘记设置人物排序图层,运行人物就动起来了新增run动画设置人物碰撞体设置刚体将重力设置为0,持续人物移动和动画切换的代码设置摄像机跟随单例代码在room中调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1043

LeetCode 316. Remove Duplicate Letters

Description Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicograph...

weixin_34029680的博客 110

贝叶斯机器学习在吸附量预测中的应用

本文介绍了贝叶斯机器学习在吸附量预测中的应用。通过Python实现完整的贝叶斯建模流程,包括数据生成、预处理、模型构建与评估。文章对比了贝叶斯与频率学派的差异,详细阐述了贝叶斯线性回归和神经网络的实现方法,并提供了数据可视化、模型诊断等技术细节。该方法不仅能预测吸附量,还能量化预测不确定性,为工程决策提供更全面的依据。全文超过6000字,结合理论推导与代码实践,是应用贝叶斯方法解决实际工程问题的完整指南。

AI的内部世界的博客 163

2017好未来秋招笔试真题复盘:字符串处理、链表翻转与边界条件全解析

在计算机技术面试与校招笔试中,数据结构与算法始终是核心考察维度。字符串处理作为最基础的编程能力之一,常以频次统计、字符筛选等题型出现,考查对哈希表、遍历顺序和边界条件的理解;链表操作则通过指针移动与区间拼接,检验对节点引用和翻转逻辑的掌握。这些题型背后体现的是代码正确性、鲁棒性与复杂度优化能力,也是教育科技、互联网等各类企业筛选人才的通用标尺。无论是备考算法面试,还是应对秋招笔试,掌握字符串频次统计和链表K组翻转等原型题,都能有效提升解题效率。本文以好未来2017年秋招真题为样本,逐题拆解考点逻辑与考场思维

weixin_33980459的博客 445

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

竞赛字符串算法避坑指南:从边界陷阱到多算法协同

字符串处理是算法竞赛的核心基础能力,涉及匹配、回文、分割、转换等关键场景。其底层原理涵盖时间复杂度约束、内存布局特性、编码兼容性与状态机建模等维度。技术价值在于通过算法选型(如KMP/Rabin-Karp/AC自动机)、结构优化(Manacher/PAM/后缀数组)和工程鲁棒性(空串处理、Unicode支持、STL安全封装)实现高效稳定求解。典型应用场景包括大规模文本匹配、动态回文统计、多模式日志解析及跨语言日期转换。本文聚焦省赛国赛高频失分点,系统拆解数据规模伪装、边界语义歧义与多算法嵌套设计三大命题逻辑

weixin_30908103的博客 355

搜狗2019秋招研究员笔试题精解:算法功底与边界条件实战

算法岗笔试考察的不仅是解题思路,更是代码鲁棒性与边界条件处理能力。动态规划、贪心策略、堆与哈希表、BFS/Dijkstra等经典模型,常被包装成“看着眼熟,上手翻车”的变形题。以搜狗2019秋招研究员第一场编程题为例,从字符串字典序最大子序列的贪心解,到环形打家劫舍的状态设计,再到Top K高频词的最小堆优化,以及矩阵最短路径的BFS与Dijkstra抉择,每道题都指向真实业务场景下的数据规模与工程素养。理解算法本质而非背模板,才能在秋招笔试中稳拿分数。本文详细拆解这些题目的考点、实现与踩坑点,助你提升算法

weixin_34234721的博客 432

C++语言程序设计——【算法竞赛常用知识点】❁´◡`❁

是不是模拟题?⏭️暴力模拟✅【题目做什么就干什么、有步骤、有流程、按照规则】(关键词):一步步操作、轮流、每次按步骤、走流程、按照规则、有删除/移动/变换/重新排列等)// 先用一个东西存当前状态(数组、vector、字符串)// 初始化(把一开始的东西放进去)while(没结束) { // 循环直到题目要求结束按题目规则操作 // 做今天/这次的操作更新状态 // 更新状态(剩下的东西替换掉原来的)举例:● 苹果每天拿走一些● 字符串每次移动第一个字符。

小宇y的博客 1353

【C++】C++ STL string 详解

本文详细介绍了C++ STL中的string类及其底层实现。主要内容包括:1) STL的六大组件(容器、算法、迭代器等)及其关系;2) string类的本质是字符数组,相比C字符串具有自动扩容等优势;3) string的历史渊源,它早于STL出现且接口设计存在冗余;4) string实际上是basic_string<char>的别名,支持不同字符编码类型;5) 深入解析ASCII、Unicode(UTF-8/16/32)和GBK等编码方案的区别,以及UTF-8兼容ASCII的特性。文章还比较了Windows

feng_qi0325的博客 413

C语言算法

较大数a作除数,较小数b作被除数,两数相除得余数;把b赋为除数,余数赋为被除数,反复相除直至余数为0;原理:对于任意两个正整数啊a,b(a>b),有gcd( a,b)=gcd( b,a mod b)//a mod b指a除以b的余数,gcd(x,y)表示x,y的最大公约数。输入一行字符,统计其中中英文字母、空格、数字和其他字符的个数。//用getchar()函数(遇到换行符'\n'结束)2.最大公约数(hcf)和最小公倍数(lcd)12.统计一个整数的位数及各位数字(逆序输出)4.合并有序数组为新数组。

Danica368的博客 159

Trie树(前缀树)核心原理、多语言实现与工程实践全解析

在计算机科学中,数据结构是构建高效算法的基石。当处理大量字符串数据时,如何快速进行前缀匹配和检索成为关键挑战。哈希表虽然提供O(1)的平均查找性能,但在处理“查找所有以某前缀开头的字符串”这类场景时却无能为力。Trie树(前缀树)正是为解决此类问题而生的高效数据结构,其核心原理是将字符串的公共前缀在树形结构中进行共享存储,使得查找时间复杂度仅与目标字符串长度相关,而与数据总量无关。这种特性使其在工程实践中价值巨大,尤其适用于搜索引擎的自动补全、输入法的词库联想、网络路由表的最长前缀匹配以及敏感词过滤系统等高

weixin_34320159的博客 402

C++上机基础

C/C++ 的 main 函数必须是int类型。程序正常结束时的返回值必须是 0。

m0_74161592的博客 231

腾讯音乐测试岗笔试全复盘:考点拆解与高效备考指南

软件测试是保障产品质量的关键环节,其核心在于通过测试用例设计、风险分析和自动化手段验证系统行为。工程实践中,Linux命令、SQL查询和Python编程是测试工程师必备的基础能力,它们用于日志分析、数据校验和脚本编写,在接口自动化、移动端测试等场景中发挥重要作用。大厂测试岗笔试不仅考察算法,更强调测试思维与工程落地能力,例如如何设计搜索功能的测试用例、如何用pytest搭建接口测试框架、如何借助Appium实现移动端自动化。本文以腾讯音乐春招测试岗笔试为例,梳理从客观题到编程题的完整考点,复盘时间分配策略与

weixin_30832405的博客 353
上一篇: 一个数组中,如果两个数的公共因子有大于1的,则认为这两个数之间有通路。返回数组中有多少独立的域。
下一篇: 给定两个数组arrx和arry,长度都为N。代表二维平面上有N个点,第i个点的x 坐标和y坐标分别为arrx[i]和arry[i],返回求一条直线最多能穿过多少个点?
朂後 哋箹萣
博客等级 码龄7年 43粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值