1704. Determine if String Halves Are Alike

1704. Determine if String Halves Are Alike #

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.

Example 3:

Input: s = "MerryChristmas"
Output: false

Example 4:

Input: s = "AbCdEfGh"
Output: true

Constraints:

  • 2 <= s.length <= 1000
  • s.length is even.
  • s consists of uppercase and lowercase letters.

Problem Summary #

Given a string s of even length. Split it into two halves of equal length, with the first half being a and the second half being b. Two strings are alike if they contain the same number of vowels ('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'). Note that s may contain both uppercase and lowercase letters. If a and b are alike, return true; otherwise, return false.

Solution Ideas #

  • Simple problem. According to the problem statement, count the number of vowels in the first half and the number of vowels in the second half separately. If the counts are the same, output true; otherwise, output false.

Code #

package leetcode

func halvesAreAlike(s string) bool {
	return numVowels(s[len(s)/2:]) == numVowels(s[:len(s)/2])
}

func numVowels(x string) int {
	res := 0
	for _, c := range x {
		switch c {
		case 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U':
			res++
		}
	}
	return res
}

Calendar Jun 25, 2026
Edit Edit this page
Total visits:   You are visitor No.
中文