comments | difficulty | edit_url | rating | source | tags | |||
---|---|---|---|---|---|---|---|---|
true |
简单 |
1242 |
第 57 场双周赛 Q1 |
|
给你一个字符串 s
,如果 s
是一个 好 字符串,请你返回 true
,否则请返回 false
。
如果 s
中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s
是 好 字符串。
示例 1:
输入:s = "abacbc" 输出:true 解释:s 中出现过的字符为 'a','b' 和 'c' 。s 中所有字符均出现 2 次。
示例 2:
输入:s = "aaabb" 输出:false 解释:s 中出现过的字符为 'a' 和 'b' 。 'a' 出现了 3 次,'b' 出现了 2 次,两者出现次数不同。
提示:
1 <= s.length <= 1000
s
只包含小写英文字母。
我们用一个哈希表或一个长度为
接下来遍历
时间复杂度
class Solution:
def areOccurrencesEqual(self, s: str) -> bool:
cnt = Counter(s)
return len(set(cnt.values())) == 1
class Solution {
public boolean areOccurrencesEqual(String s) {
int[] cnt = new int[26];
for (int i = 0; i < s.length(); ++i) {
++cnt[s.charAt(i) - 'a'];
}
int x = 0;
for (int v : cnt) {
if (v > 0) {
if (x == 0) {
x = v;
} else if (x != v) {
return false;
}
}
}
return true;
}
}
class Solution {
public:
bool areOccurrencesEqual(string s) {
int cnt[26]{};
for (char& c : s) {
++cnt[c - 'a'];
}
int x = 0;
for (int& v : cnt) {
if (v) {
if (!x) {
x = v;
} else if (x != v) {
return false;
}
}
}
return true;
}
};
func areOccurrencesEqual(s string) bool {
cnt := [26]int{}
for _, c := range s {
cnt[c-'a']++
}
x := 0
for _, v := range cnt {
if v > 0 {
if x == 0 {
x = v
} else if x != v {
return false
}
}
}
return true
}
function areOccurrencesEqual(s: string): boolean {
const cnt: number[] = new Array(26).fill(0);
for (const c of s) {
++cnt[c.charCodeAt(0) - 'a'.charCodeAt(0)];
}
let x = 0;
for (const v of cnt) {
if (v) {
if (!x) {
x = v;
} else if (x !== v) {
return false;
}
}
}
return true;
}
class Solution {
/**
* @param String $s
* @return Boolean
*/
function areOccurrencesEqual($s) {
for ($i = 0; $i < strlen($s); $i++) {
$hashtable[$s[$i]] += 1;
}
$rs = array_unique($hashtable);
return count($rs) === 1;
}
}
function areOccurrencesEqual(s: string): boolean {
const cnt: number[] = new Array(26).fill(0);
for (const c of s) {
++cnt[c.charCodeAt(0) - 'a'.charCodeAt(0)];
}
const x = cnt.find(v => v);
return cnt.every(v => !v || v === x);
}