넘치게 채우기
[LeetCode] 1704. Determine if String Halves Are Alike 본문
https://leetcode.com/problems/determine-if-string-halves-are-alike/description/
leetcode - Determine if String Halves Are Alike
문제 유형 : 문자열 처리
문제 난이도 : Easy
문제
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.
당신은 문자열 s를 받는다. 짝수 길이이고, 절반 기준으로 나눴을 때, 앞부분은 a, 뒷부분을 b라고 하자.
두 문자열들은 모음의 개수가 같으면 비슷하다고 할 수 있다. s에는 대소문자 모두 올 수 있음을 명심하라.
a와 b가 비슷하면 true를, 아니면 false를 반환하시오.
풀이
s의 길이를 n이라고 했을 때, 0~n/2-1까지의 모음의 개수를 a, n/2 ~ n-1까지의 모음의 개수를 b에 저장한다.
모음은 따로 집합 자료구조에 저장해서, 빠르게 찾을 수 있도록 한다.
매번 인덱스마다 문자가 모음 집합에 있는지 알아보고, 모음이면 개수를 1씩 올리면 된다.
a와 b가 같으면 true, 다르면 false를 반환시키면 된다.
코드
C++
class Solution {
public:
bool halvesAreAlike(string s) {
const int n = s.size();
set<char> vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
int a = 0,b=0;
for(int i = 0; i < n/2; i++) {
if(vowels.find(s[i]) != vowels.end()) a++;
}
for(int i = n/2; i < n; i++) {
if(vowels.find(s[i]) != vowels.end()) b++;
}
return a == b;
}
};
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 1657. Determine if Two Strings Are Close (0) | 2024.01.14 |
---|---|
[LeetCode] 1347. Minimum Number of Steps to Make Two Strings Anagram (0) | 2024.01.13 |
[LeetCode] 1026. Maximum Difference Between Node and Ancestor (0) | 2024.01.11 |
[LeetCode] 2385. Amount of Time for Binary Tree to Be Infected (0) | 2024.01.10 |
[LeetCode] 872. Leaf-Similar Trees (0) | 2024.01.09 |