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)