LeetCode 2423. 删除字符使频率相同
【LetMeFly】2423.删除字符使频率相同
力扣题目链接:https://leetcode.cn/problems/remove-letter-to-equalize-frequency/
给你一个下标从 0 开始的字符串 word
,字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符,使得 word
中剩余每个字母出现 频率 相同。
如果删除一个字母后,word
中剩余所有字母的出现频率都相同,那么返回 true
,否则返回 false
。
注意:
- 字母
x
的 频率 是这个字母在字符串中出现的次数。 - 你 必须 恰好删除一个字母,不能一个字母都不删除。
示例 1:
输入:word = "abcc"
输出:true
解释:选择下标 3 并删除该字母,word 变成 "abc" 且每个字母出现频率都为 1 。
示例 2:
输入:word = "aazz"
输出:false
解释:我们必须删除一个字母,所以要么 "a" 的频率变为 1 且 "z" 的频率为 2 ,要么两个字母频率反过来。所以不可能让剩余所有字母出现频率相同。
提示:
2 <= word.length <= 100
word
只包含小写英文字母。
方法一:模拟
首先开辟一个大小为26的数组 b i n bin bin,用来存放26个字母的出现次数(只需要遍历一遍字符串即可得到)
接着用 i i i从0遍历到26,如果 b i n [ i ] bin[i] bin[i]非零,就让 b i n [ i ] bin[i] bin[i]减去 1 1 1,如果其余非零的bin值全部相同就返回 t r u e true true
如果遍历完也没有返回 t r u e true true,就返回 f a l s e false false
怎么判断非零bin的值是否全部相等呢?使用一个变量 v a l = 0 val = 0 val=0,遍历 b i n bin bin。
- 如果 b i n [ i ] bin[i] bin[i]非零,就看 v a l val val是否为 0 0 0
- 如果 v a l val val为 0 0 0,就令 v a l = b i n [ i ] val = bin[i] val=bin[i]
- 否则若 v a l ≠ b i n [ i ] val \neq bin[i] val=bin[i],就返回 f a l s e false false
若遍历完未返回 f a l s e false false,就返回 t r u e true true
- 时间复杂度 O ( l e n ( w o r d ) C 2 ) O(len(word) C^2) O(len(word) C2),其中 C = 26 C=26 C=26
- 空间复杂度 O ( C ) O(C) O(C)
AC代码
C
C 时间击败100%,空间击败93.22%嘿嘿,没有使用自带哈希表
class Solution {
private:
bool isSame(int* a) {
int val = 0;
for (int i = 0; i < 26; i ) {
if (a[i]) {
if (val) {
if (a[i] != val) {
return false;
}
}
else {
val = a[i];
}
}
}
return true;
}
public:
bool equalFrequency(string word) {
int bin[26] = {0};
for (char c : word) {
bin[c - 'a'] ;
}
for (int i = 0; i < 26; i ) {
if (bin[i]) {
bin[i]--;
if (isSame(bin)) {
return true;
}
bin[i] ;
}
}
return false;
}
};
Python
class Solution:
def isSame(self, a: list) -> bool:
val = 0
for v in a:
if v:
if val:
if val != v:
return False
else:
val = v
return True
def equalFrequency(self, word: str) -> bool:
bin = [0] * 26
for c in word:
bin[ord(c) - ord('a')] = 1
for i in range(26):
if bin[i]:
bin[i] -= 1
if self.isSame(bin):
return True
bin[i] = 1
return False
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggigja
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13