【LeetCode】移除指定数字得到的最大结果 Java 题解
题目描述
给你一个表示某个正整数的字符串 number 和一个字符 digit 。
从 number 中 恰好 移除 一个 等于 digit 的字符后,找出并返回按 十进制 表示 最大 的结果字符串。生成的测试用例满足 digit 在 number 中出现至少一次。
复制代码
思路分析
今天的算法题目是字符串处理题目,题目含义简单明了。解决这个题目,我们要对 Java 字符串处理的相关函数熟悉,比如:substring() 的用法。
首先我们可以使用朴素解法,按照题目要求,枚举出每一种去掉 digit 字符的情况,然后比较大小,得到答案。
朴素解法之后,我们对题目有了更深的理解,观察题目的重要条件,从 number 中 恰好 移除 一个 等于 digit 的字符后,找出并返回按 十进制 表示 最大 的结果字符串。
十进制是我们最常使用的数值表示方法,可以直接比较。分析例子 2,找到 第一个 digit 之后,下一个字符 2 > 1, 得到的数值比较大,我们可以假设 number.charAt(i) > digit && number.charAt(i + 1) > digit, 极为相对较大的数值。使用贪心找较大的值的位置即可。实现代码如下,供参考。
通过代码
朴素解法
复制代码
贪心解法
复制代码
总结
朴素解法的时间复杂度是 O(n),空间复杂度是 O(1)
贪心解法的时间复杂度是 O(n),空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/9020a698de0ce864e0711c2ba】。文章转载请联系作者。
评论