Easy
题目描述
给你一个下标从 0 开始的字符串数组 details。details 中每个元素都是一个长度为 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 <= 100details[i].length == 15details[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个字符:座位号
解法分析:
直接字符串提取:遍历每个字符串,提取索引11和12位置的字符,将其转换为两位数的年龄,然后判断是否大于60。
字符转数字:可以通过字符减去'0’的方式将字符转为数字,或者使用语言内置的转换函数。
推荐解法:直接提取年龄字符并转换为数字进行比较,时间复杂度最优且代码简洁。
具体步骤:
- 遍历details数组中的每个字符串
- 提取第11和12位置的字符组成年龄
- 将年龄转换为整数
- 判断是否大于60,是则计数器加1
- 返回最终计数结果
代码实现
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) | 只使用了常数级别的额外空间 |