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 <= 100
  • s 由小写英文字母组成
  • letter 是一个小写英文字母

解题思路

这是一道简单的字符串统计题目,解题思路非常直接:

思路分析

核心思路: 统计目标字符出现次数,计算百分比并向下取整。

  1. 统计字符频次:遍历字符串 s,统计字符 letter 出现的次数
  2. 计算百分比:使用公式 (出现次数 / 字符串长度) × 100
  3. 向下取整:由于题目要求向下舍入到最近的整数,我们直接使用整数除法即可

具体实现方法:

  • 方法一:遍历计数 + 公式计算(推荐)
  • 方法二:使用内置函数统计(如 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)只使用了常数个额外变量存储计数器

相关题目