Easy

题目描述

给你一个下标从 0 开始的字符串数组 detailsdetails 中每个元素都是一个长度为 15 的字符串,表示一位乘客的信息,其中:

  • 前十个字符是乘客的手机号码。
  • 接下来的一个字符是乘客的性别。
  • 接下来两个字符是乘客的年龄。
  • 最后两个字符是乘客的座位号。

请你返回年龄 严格大于 60 岁 的乘客数量。

示例 1:

输入:details = ["7868190130M7522","5303914400F9211","9273338290F4010"]
输出:2
解释:下标为 0、1、2 的乘客年龄分别为 75、92、40。因此有 2 人的年龄大于 60 岁。

示例 2:

输入:details = ["1313579440F2036","2921522980M5644"]
输出:0
解释:没有乘客的年龄大于 60 岁。

提示:

  • 1 <= details.length <= 100
  • details[i].length == 15
  • details[i] 仅由数字 '0''9' 组成
  • details[i][10]'M''F''O' 中的一个
  • 乘客的手机号码和座位号是不同的

提示:

  • 将索引 11 和 12 处的值转换为数值
  • 索引 i 处乘客的年龄等于 details[i][11]*10+details[i][12]

解题思路

解题思路

这是一道简单的字符串处理题目,需要从固定格式的字符串中提取年龄信息并统计符合条件的人数。

根据题目描述,每个字符串的格式固定为15个字符:

  • 前10个字符:手机号码
  • 第11个字符(索引10):性别
  • 第12-13个字符(索引11-12):年龄
  • 最后2个字符:座位号

解法分析:

  1. 直接字符串提取:遍历每个字符串,提取索引11和12位置的字符,将其转换为两位数的年龄,然后判断是否大于60。

  2. 字符转数字:可以通过字符减去'0’的方式将字符转为数字,或者使用语言内置的转换函数。

推荐解法:直接提取年龄字符并转换为数字进行比较,时间复杂度最优且代码简洁。

具体步骤:

  1. 遍历details数组中的每个字符串
  2. 提取第11和12位置的字符组成年龄
  3. 将年龄转换为整数
  4. 判断是否大于60,是则计数器加1
  5. 返回最终计数结果

代码实现

class Solution {
public:
    int countSeniors(vector<string>& details) {
        int count = 0;
        for (const string& detail : details) {
            int age = (detail[11] - '0') * 10 + (detail[12] - '0');
            if (age > 60) {
                count++;
            }
        }
        return count;
    }
};
class Solution:
    def countSeniors(self, details: List[str]) -> int:
        count = 0
        for detail in details:
            age = int(detail[11:13])
            if age > 60:
                count += 1
        return count
public class Solution {
    public int CountSeniors(string[] details) {
        int count = 0;
        foreach (string detail in details) {
            int age = (detail[11] - '0') * 10 + (detail[12] - '0');
            if (age > 60) {
                count++;
            }
        }
        return count;
    }
}
var countSeniors = function(details) {
    let count = 0;
    for (const detail of details) {
        const age = parseInt(detail.substring(11, 13));
        if (age > 60) {
            count++;
        }
    }
    return count;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n)需要遍历每个字符串,每次提取年龄的时间为O(1)
空间复杂度O(1)只使用了常数级别的额外空间