1704.Determine if String Halves Are Alike
===
###### tags: `Easy`,`String`,`Counting`
[1704.Determine if String Halves Are Alike](https://leetcode.com/problems/determine-if-string-halves-are-alike/)
### 題目描述
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 <= 1000`
* `s.length` is even.
* `s` consists of **uppercase and lowercase** letters.
### 解答
#### Javascript
```javascript=
function halvesAreAlike2(s) {
const vowels = 'aeiouAEIOU';
let count = 0;
for (let i = 0; i < s.length / 2; i++) {
if (vowels.includes(s[i])) count++;
if (vowels.includes(s[s.length - 1 - i])) count--;
}
return count === 0;
}
```
> 這題用set會比較慢欸
> [name=Marsgoat] [time= Dec 1, 2022]
#### Python
```python=
class Solution:
def halvesAreAlike(self, s: str) -> bool:
cnt, mid = 0, len(s) // 2
for idx in range(mid):
if s[idx] in 'aeiouAEIOU': cnt += 1
if s[mid+idx] in 'aeiouAEIOU': cnt -= 1
return cnt == 0
```
> [name=Kobe] [time= Dec 1, 2022]
#### Java
```java=
class Solution {
public boolean halvesAreAlike(String s) {
int cnt = 0;
var vowels = Set.of('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U');
for(int i = 0, j = s.length() - 1; i < j; i++, j--) {
cnt += vowels.contains(s.charAt(i)) ? 1 : 0;
cnt -= vowels.contains(s.charAt(j)) ? 1 : 0;
}
return cnt == 0;
}
}
```
> Java 語法越來越先進
> [name=Kobe] [time= Dec 1, 2022]
#### TypeScript
- first submission
```typescript=
function halvesAreAlike(s: string): boolean {
const vowels = 'aeiouAEIOU';
const firstHalf = s.substring(0, s.length / 2);
const lastHalf = s.substring(s.length / 2);
let firstHalfVowelsCount: number = 0;
let lastHalfVowelsCount: number = 0;
firstHalf.split('').forEach((d) => {
if (vowels.includes(d)) firstHalfVowelsCount++;
});
lastHalf.split('').forEach((d) => {
if (vowels.includes(d)) lastHalfVowelsCount++;
});
return firstHalfVowelsCount === lastHalfVowelsCount;
}
```
- the 抄
```typescript=
function halvesAreAlike(s: string): boolean {
const vowels = 'aeiouAEIOU';
const firstHalf = s.substring(0, s.length / 2);
const lastHalf = s.substring(s.length / 2);
let count: number = 0;
for (let i = 0; i < s.length / 2; i++) {
if (vowels.includes(firstHalf[i])) count++;
if (vowels.includes(lastHalf[i])) count--;
}
return count === 0;
}
```
> [name=sheep] [time= Dec 1, 2022]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)