Easy

题目描述

字母数字字符串的值可以定义为:

  • 如果字符串只包含数字,则值为该字符串在十进制下的数字表示。
  • 否则,值为该字符串的长度。

给定一个由字母数字字符串组成的数组 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 <= 100
  • 1 <= strs[i].length <= 9
  • strs[i] 只包含小写英文字母和数字。

解题思路

这道题的核心在于理解两种不同的计算规则:

  1. 如果字符串只包含数字,计算其数值大小
  2. 否则计算字符串长度

解题思路:

首先遍历数组中的每个字符串,对每个字符串判断是否只包含数字:

  • 可以通过遍历字符串的每个字符,检查是否都是数字字符
  • 也可以使用语言自带的函数来判断

如果字符串只包含数字,将其转换为整数;否则返回字符串长度。在遍历过程中维护最大值即可。

需要注意的边界情况:

  • 字符串可能以0开头(如"00000"),转换为整数后值为0
  • 单个数字字符串的处理

时间复杂度为O(n×m),其中n是字符串数量,m是字符串平均长度。空间复杂度为O(1)。

代码实现

class Solution {
public:
    int maximumValue(vector<string>& strs) {
        int maxVal = 0;
        
        for (const string& str : strs) {
            bool isDigit = true;
            for (char c : str) {
                if (!isdigit(c)) {
                    isDigit = false;
                    break;
                }
            }
            
            int value;
            if (isDigit) {
                value = stoi(str);
            } else {
                value = str.length();
            }
            
            maxVal = max(maxVal, value);
        }
        
        return maxVal;
    }
};
class Solution:
    def maximumValue(self, strs: List[str]) -> int:
        max_val = 0
        
        for s in strs:
            if s.isdigit():
                value = int(s)
            else:
                value = len(s)
            
            max_val = max(max_val, value)
        
        return max_val
public class Solution {
    public int MaximumValue(string[] strs) {
        int maxVal = 0;
        
        foreach (string str in strs) {
            bool isDigit = true;
            foreach (char c in str) {
                if (!char.IsDigit(c)) {
                    isDigit = false;
                    break;
                }
            }
            
            int value;
            if (isDigit) {
                value = int.Parse(str);
            } else {
                value = str.Length;
            }
            
            maxVal = Math.Max(maxVal, value);
        }
        
        return maxVal;
    }
}
var maximumValue = function(strs) {
    let maxVal = 0;
    
    for (let str of strs) {
        let isDigit = true;
        for (let c of str) {
            if (c < '0' || c > '9') {
                isDigit = false;
                break;
            }
        }
        
        let value;
        if (isDigit) {
            value = parseInt(str);
        } else {
            value = str.length;
        }
        
        maxVal = Math.max(maxVal, value);
    }
    
    return maxVal;
};

复杂度分析

复杂度大小
时间复杂度O(n × m)
空间复杂度O(1)

其中 n 是字符串数组的长度,m 是字符串的平均长度。

相关题目