LeetCode 1796. Second Largest Digit in a String Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
1796. Second Largest Digit in a String

Description

Given an alphanumeric string s, return the second largest numerical digit that appears in s, or -1 if it does not exist.

An alphanumeric string is a string consisting of lowercase English letters and digits.

 

Example 1:

Input: s = "dfa12321afd"
Output: 2
Explanation: The digits that appear in s are [1, 2, 3]. The second largest digit is 2.

Example 2:

Input: s = "abc1111"
Output: -1
Explanation: The digits that appear in s are [1]. There is no second largest digit. 

 

Constraints:

  • 1 <= s.length <= 500
  • s consists of only lowercase English letters and digits.

Solutions

Solution 1: One Pass

We define a and b to represent the largest and second largest numbers in the string, initially a = b = -1.

We traverse the string s. If the current character is a digit, we convert it to a number v. If v > a, it means that v is the largest number currently appearing, we update b to a, and update a to v; if v < a, it means that v is the second largest number currently appearing, we update b to v.

After the traversal, we return b.

The time complexity is O(n), where n is the length of the string s. The space complexity is O(1).

PythonJavaC++GoTypeScriptRustC
class Solution: def secondHighest(self, s: str) -> int: a = b = -1 for c in s: if c.isdigit(): v = int(c) if v > a: a, b = v, a elif b < v < a: b = v return b(code-box)

Solution 2: Bit Manipulation

We can use an integer mask to mark the numbers that appear in the string, where the i-th bit of mask indicates whether the number i has appeared.

We traverse the string s. If the current character is a digit, we convert it to a number v, and set the v-th bit of mask to 1.

Finally, we traverse mask from high to low, find the second bit that is 1, and the corresponding number is the second largest number. If there is no second largest number, return -1.

The time complexity is O(n), where n is the length of the string s. The space complexity is O(1).

PythonJavaC++Go
class Solution: def secondHighest(self, s: str) -> int: mask = reduce(or_, (1 << int(c) for c in s if c.isdigit()), 0) cnt = 0 for i in range(9, -1, -1): if (mask >> i) & 1: cnt += 1 if cnt == 2: return i return -1(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !