2496. 数组中字符串的最大值
题目描述
一个由字母和数字组成的字符串的 值 定义如下:
- 如果字符串 只 包含数字,那么值为该字符串在
10进制下的所表示的数字。 - 否则,值为字符串的 长度 。
给你一个字符串数组 strs ,每个字符串都只由字母和数字组成,请你返回 strs 中字符串的 最大值 。
示例 1:
输入:strs = ["alic3","bob","3","4","00000"] 输出:5 解释: - "alic3" 包含字母和数字,所以值为长度 5 。 - "bob" 只包含字母,所以值为长度 3 。 - "3" 只包含数字,所以值为 3 。 - "4" 只包含数字,所以值为 4 。 - "00000" 只包含数字,所以值为 0 。 所以最大的值为 5 ,是字符串 "alic3" 的值。
示例 2:
输入:strs = ["1","01","001","0001"] 输出:1 解释: 数组中所有字符串的值都是 1 ,所以我们返回 1 。
提示:
1 <= strs.length <= 1001 <= strs[i].length <= 9strs[i]只包含小写英文字母和数字。
解法
方法一:模拟
思考
字符串要么是十进制数值,要么含字母则取其长度。长度至多 \(9\),对每个串判断是否全为数字后取 \(\textit{int}\) 或 \(\textit{len}\),再求最大。
我们定义一个函数 \(f(s)\),用于计算字符串 \(s\) 的值。如果 \(s\) 只包含数字,那么 \(f(s)\) 就是 \(s\) 在十进制下的值;否则 \(f(s)\) 就是 \(s\) 的长度。
答案为 \(\max\limits_{s \in \textit{strs}} f(s)\)。
时间复杂度 \(O(n)\),其中 \(n\) 是数组 \(strs\) 的长度。空间复杂度 \(O(1)\)。
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
方法二
思考
方法一依赖语言的整串转整数。改为逐字符累加:遇字母立即返回长度,否则按十进制拼值。避免一次额外的全数字预检查。
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
方法三
思考
与方法一相同的语义,用语言内置 \(parse\):成功则取数值,失败则取长度。实现更短,错误路径即「含非数字」。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |