It contains only digits (0-9), and English letters (uppercase and lowercase).
It includes at least one vowel.
It includes at least one consonant.
You are given a string word.
Return true if word is valid, otherwise, return false.
Notes:
'a', 'e', 'i', 'o', 'u', and their uppercases are vowels.
A consonant is an English letter that is not a vowel.
Example 1:
Input:word = "234Adas"
Output:true
Explanation:
This word satisfies the conditions.
Example 2:
Input:word = "b3"
Output:false
Explanation:
The length of this word is fewer than 3, and does not have a vowel.
Example 3:
Input:word = "a3$e"
Output:false
Explanation:
This word contains a '$' character and does not have a consonant.
Constraints:
1 <= word.length <= 20
word consists of English uppercase and lowercase letters, digits, '@', '#', and '$'.
Solutions
Solution 1: Simulation
Thinking
A valid word has length at least \(3\), only alphanumerics, and at least one vowel and one consonant. The checks are independent and fit in one scan.
No automaton is required. A non-alphanumeric character fails immediately; letters are classified by a vowel set.
Reject short strings, then track \(has\_vowel\) and \(has\_consonant\). Both flags must be true at the end.
First, we check if the length of the string is less than 3. If it is, we return false.
Next, we iterate through the string, checking if each character is a letter or a number. If it's not, we return false. Otherwise, we check if the character is a vowel. If it is, we set has_vowel to true. If it's not, we set has_consonant to true.
Finally, if both has_vowel and has_consonant are true, we return true. Otherwise, we return false.
The time complexity is \(O(n)\), and the space complexity is \(O(1)\). Where \(n\) is the length of the string.