1704 Determine if String Halves Are Alike - Easy
Problem:
You are given a string s of even length. Split this string into two halves of equal lengths, and let a be the first half and b be the second half.
Two strings are alike if they have the same number of vowels ('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'). Notice that s contains uppercase and lowercase letters.
Return true if a and b are alike. Otherwise, return false.
Example 1:
Input: s = "book" Output: true Explanation: a = "bo" and b = "ok". a has 1 vowel and b has 1 vowel. Therefore, they are alike.
Example 2:
Input: s = "textbook" Output: false Explanation: a = "text" and b = "book". a has 1 vowel whereas b has 2. Therefore, they are not alike. Notice that the vowel o is counted twice.
Constraints:
2 <= s.length <= 1000s.lengthis even.sconsists of uppercase and lowercase letters.
Problem Analysis
High-Level Strategy:
-
Initialization: Initialize a string
vowelswith the vowels "aeiou". Convert the input stringsto lowercase to make the comparison case-insensitive. -
Check Length: If the length of the string
sis odd, returnFalsebecause the string cannot be split into equal halves. -
Calculate Midpoint: Calculate the midpoint of the string
sby using integer division (length // 2). -
Count Vowels in Halves: Count the number of vowels in the first half (
s[:mid]) and the second half (s[mid:]) using a generator expression and thesumfunction. -
Comparison: Return
Trueif the counts of vowels in the first half are equal to the counts in the second half; otherwise, returnFalse.
Complexity:
-
Time Complexity: The time complexity is O(N), where N is the length of the input string
s. The algorithm iterates through the string once to calculate the counts of vowels in the first and second halves. -
Space Complexity: The space complexity is O(1). The algorithm uses a constant amount of space for the
vowelsstring and a few variables (length,mid,count_first,count_second). The space required does not grow with the input size.
Solutions:
class Solution:
def halvesAreAlike(self, s: str) -> bool:
vowels = "aeiou"
s = s.lower()
length = len(s)
if length % 2 == 1:
return False
mid = length // 2
count_first = sum(1 for char in s[:mid] if char in vowels)
count_second = sum(1 for char in s[mid:] if char in vowels)
return count_first == count_second
Walter Teng.