1704. Determine if String Halves Are Alike

Description

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.

Constraints

  • 2 <= s.length <= 1000

  • s.length is even.

  • s consists of uppercase and lowercase letters.

Approach

  • GeeksforGeeks

  • ProgramCreek

  • YouTube

Examples

Input: s = "book"

Output: true

Explanation: a = "bo" and b = "ok". a has 1 vowel and b has 1 vowel. Therefore, they are alike.

Solutions

/**
 * Time complexity : O(N), since we need to iterate substring a and b.
 * Space complexity : O(1), since we do not need extra space. 
 *    Here we do not take the input s into consideration.
 */

class Solution {
    public boolean halvesAreAlike(String s) {
        int vowelsDiff = 0;
        
        for(int i = 0, j = s.length()-1; i < j; i++, j--) {
            if(isVowel(s.charAt(i))) {
                vowelsDiff++;
            }
            if(isVowel(s.charAt(j))) {
                vowelsDiff--;
            }
        }
        
        return vowelsDiff == 0;
    }
    
    private boolean isVowel(char ch) {
        switch(ch) {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U': return true;
        }
        return false;
    }
}

Follow up

Last updated

Was this helpful?