老人的数目

标签: 数组 字符串

难度: 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 <= 100
  • details[i].length == 15
  • details[i] 中的数字只包含 '0' 到 '9' 。
  • details[i][10] 是 'M' ,'F' 或者 'O' 之一。
  • 所有乘客的手机号码和座位号互不相同。

Submission

运行时间: 19 ms

内存: 15.9 MB

class Solution:
    def countSeniors(self, details: List[str]) -> int:
        count = 0
        for i in details:
            if int(i[11:13])>60:
                count = count + 1
        return count

Explain

此题解通过遍历每个乘客的信息字符串,切片获取年龄部分并转换为整数,然后检查是否大于60岁。对于每个年龄大于60岁的乘客,计数器增加1,最后返回计数器的值。

时间复杂度: O(n)

空间复杂度: O(1)

class Solution:
    def countSeniors(self, details: List[str]) -> int:
        count = 0  # 初始化计数器
        for i in details:  # 遍历每个乘客的信息
            if int(i[11:13]) > 60:  # 转换年龄并检查是否大于60岁
                count += 1  # 年龄大于60岁,计数器加1
        return count  # 返回总的满足条件的乘客数

Explore

在题解中,并没有明确提到对字符串格式的前置验证。为了确保始终正确地提取年龄信息,算法应该首先验证每个字符串的长度和格式是否符合预期。可以通过正则表达式或字符串长度检查来确保每个字符串都具有正确的格式和长度。如果格式不匹配,应该抛出错误或跳过这些项。

题解中直接将年龄字符串转换为整数确实存在一定的风险。理想情况下,应该在转换前添加错误处理逻辑,比如使用try-except结构来捕获并处理ValueError,这种错误会在字符串包含非数字字符时引发。此外,进行转换前,可以先检查字符串是否只包含数字。

如果存在长度不足或超出的情况,题解中的方法可能会引发错误,例如索引错误。为了处理这种情况,应在执行切片操作之前验证字符串的长度。如果长度不符合预期,可以选择跳过这个字符串或标记为错误处理,保证程序的健壯性和稳定性。

题解中的方法没有考虑年龄字段前置有空格的情况。如果年龄字段前有空格,直接切片并转换为整数可能会引发ValueError。为了解决这个问题,应在转换为整数之前使用字符串的strip()方法来移除可能存在的前后空格。这样可以确保即使年龄字段有空格,也能正确地进行比较。