Problem

The value of an alphanumeric string can be defined as:

  • The numeric representation of the string in base 10, if it comprises of digits only.
  • The length of the string, otherwise.

Given an array strs of alphanumeric strings, return the maximum value of any string in strs.

Examples

Example 1:

1
2
3
4
5
6
7
8
9
Input: strs = ["alic3","bob","3","4","00000"]
Output: 5
Explanation: 
- "alic3" consists of both letters and digits, so its value is its length, i.e. 5.
- "bob" consists only of letters, so its value is also its length, i.e. 3.
- "3" consists only of digits, so its value is its numeric equivalent, i.e. 3.
- "4" also consists only of digits, so its value is 4.
- "00000" consists only of digits, so its value is 0.
Hence, the maximum value is 5, of "alic3".

Example 2:

1
2
3
4
Input: strs = ["1","01","001","0001"]
Output: 1
Explanation: 
Each string in the array has value 1. Hence, we return 1.

Constraints:

  • 1 <= strs.length <= 100
  • 1 <= strs[i].length <= 9
  • strs[i] consists of only lowercase English letters and digits.

Discuss

Solution

Method 1 - Simple Iteration

Intuition: Iterate through each string, check if it is numeric. If so, convert to integer; otherwise, use its length. Track the maximum.

Approach:

  1. For each string in the array:

    • If all characters are digits, convert to integer value.
    • Otherwise, use the string’s length.
  2. Return the maximum value found.

Code

1
2
3
4
5
6
7
8
9
def maximumValue(strs):
    max_val = 0
    for s in strs:
        if s.isdigit():
            val = int(s)
        else:
            val = len(s)
        max_val = max(max_val, val)
    return max_val
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int maximumValue(vector<string>& strs) {
    int max_val = 0;
    for (auto& s : strs) {
        bool is_num = all_of(s.begin(), s.end(), ::isdigit);
        int val = is_num ? stoi(s) : s.length();
        max_val = max(max_val, val);
    }
    return max_val;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Solution {
    public int maximumValue(String[] strs) {
        int maxVal = 0;
        for (String s : strs) {
            int val;
            if (s.matches("\\d+")) {
                val = Integer.parseInt(s);
            } else {
                val = s.length();
            }
            maxVal = Math.max(maxVal, val);
        }
        return maxVal;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import "strconv"
func maximumValue(strs []string) int {
    maxVal := 0
    for _, s := range strs {
        val := 0
        if _, err := strconv.Atoi(s); err == nil {
            val, _ = strconv.Atoi(s)
        } else {
            val = len(s)
        }
        if val > maxVal {
            maxVal = val
        }
    }
    return maxVal
}
1
2
3
4
5
6
7
8
fun maximumValue(strs: Array<String>): Int {
    var maxVal = 0
    for (s in strs) {
        val valNum = s.toIntOrNull() ?: s.length
        maxVal = maxOf(maxVal, valNum)
    }
    return maxVal
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
pub fn maximum_value(strs: Vec<String>) -> i32 {
    let mut max_val = 0;
    for s in strs.iter() {
        let val = if s.chars().all(|c| c.is_ascii_digit()) {
            s.parse::<i32>().unwrap_or(0)
        } else {
            s.len() as i32
        };
        max_val = max_val.max(val);
    }
    max_val
}

Complexity

  • Time: O(n * m) where n = number of strings, m = max string length
  • Space: O(1)

Method 2 - Using Map/Functional (Python Example)

Intuition: Use a functional approach to map each string to its value, then take the max.

Approach:

  1. Map each string to its value (int if numeric, else length).
  2. Return the max of the mapped values.
Python
1
2
def maximumValue(strs):
    return max(int(s) if s.isdigit() else len(s) for s in strs)

Complexity

  • Time: O(n * m)
  • Space: O(1)