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:
Input: s = "book" Output: true Explanation: a = "bo" and b = "ok". a has 1 vowel and b has 1 vowel. Therefore, they are alike.
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.
Input: s = "MerryChristmas" Output: false
Input: s = "AbCdEfGh" Output: true
Approach: Its just an easy problem to solve. We just have to count vowels in 1st half and then count vowels in 2nd half. If the count is same we return true otherwise false.
Implementation in C#:
public bool HalvesAreAlike(string s)
{
int len = s.Length;
int count = 0;
for (int i = 0; i < len / 2; ++i)
{
if (this.IsVowel(s[i]))
{
++count;
}
}
for (int i = len/2; i < len ; ++i)
{
if (this.IsVowel(s[i]))
{
--count;
}
}
return count == 0;
}
private bool IsVowel(char ch)
{
char lowerChar = char.ToLower(ch);
return lowerChar == 'a' || lowerChar == 'e' || lowerChar == 'i' || lowerChar == 'o' || lowerChar == 'u';
}
Complexity: O(n)
No comments:
Post a Comment