> For the complete documentation index, see [llms.txt](https://code-snippets.hbamithkumara.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-snippets.hbamithkumara.com/leetcode/problems/1701-1800/determine-if-string-halves-are-alike.md).

# 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

### Links

* GeeksforGeeks
* [Leetcode](https://leetcode.com/problems/determine-if-string-halves-are-alike/)
* ProgramCreek
* YouTube

### **Examples**

{% tabs %}
{% tab title="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.
{% endtab %}

{% tab title="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.
{% endtab %}

{% tab title="Example 3" %}
**Input:** s = "MerryChristmas"

**Output:** false
{% endtab %}

{% tab title="Example 4" %}
**Input:** s = "AbCdEfGh"

**Output:** true
{% endtab %}
{% endtabs %}

### **Solutions**

{% tabs %}
{% tab title="Solution 1" %}

```java
/**
 * 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;
    }
}
```

{% endtab %}
{% endtabs %}

### **Follow up**

*
