Easy
题目描述
给你一个字符串 s 和一个字符 letter,返回在 s 中等于 letter 字符所占的百分比,向下舍入到最近的整数。
示例 1:
输入:s = "foobar", letter = "o"
输出:33
解释:
字符串 s 中等于字母 'o' 的字符百分比是 2 / 6 * 100% = 33% ,向下舍入,所以返回 33 。
示例 2:
输入:s = "jjjj", letter = "k"
输出:0
解释:
字符串 s 中等于字母 'k' 的字符百分比是 0% ,所以返回 0 。
提示:
1 <= s.length <= 100s由小写英文字母组成letter是一个小写英文字母
解题思路
这是一道简单的字符串统计题目,解题思路非常直接:
思路分析
核心思路: 统计目标字符出现次数,计算百分比并向下取整。
- 统计字符频次:遍历字符串
s,统计字符letter出现的次数 - 计算百分比:使用公式
(出现次数 / 字符串长度) × 100 - 向下取整:由于题目要求向下舍入到最近的整数,我们直接使用整数除法即可
具体实现方法:
- 方法一:遍历计数 + 公式计算(推荐)
- 方法二:使用内置函数统计(如 Python 的
count方法)
注意事项:
- 由于要求向下取整,可以直接使用整数除法
(count * 100) / length - 字符串长度最大为 100,不会有溢出问题
- 当目标字符不存在时,返回 0
时间复杂度为 O(n),空间复杂度为 O(1),是最优解法。
代码实现
class Solution {
public:
int percentageLetter(string s, char letter) {
int count = 0;
for (char c : s) {
if (c == letter) {
count++;
}
}
return (count * 100) / s.length();
}
};
class Solution:
def percentageLetter(self, s: str, letter: str) -> int:
count = s.count(letter)
return (count * 100) // len(s)
public class Solution {
public int PercentageLetter(string s, char letter) {
int count = 0;
foreach (char c in s) {
if (c == letter) {
count++;
}
}
return (count * 100) / s.Length;
}
}
/**
* @param {string} s
* @param {character} letter
* @return {number}
*/
var percentageLetter = function(s, letter) {
let count = 0;
for (let char of s) {
if (char === letter) {
count++;
}
}
return Math.floor((count / s.length) * 100);
};
复杂度分析
| 复杂度类型 | 复杂度 | 说明 |
|---|---|---|
| 时间复杂度 | O(n) | 需要遍历整个字符串统计字符出现次数,其中 n 为字符串长度 |
| 空间复杂度 | O(1) | 只使用了常数个额外变量存储计数器 |
相关题目
- . Sort Characters By Frequency (Medium)