給你一個偶數長度的字元串
s
,将其拆分成長度相同的兩半,前一半為
a
,後一半為
b
。
兩個字元串相似的前提是它們都含有相同數目的元音(
'a'
,
'e'
,
'i'
,
'o'
,
'u'
,
'A'
,
'E'
,
'I'
,
'O'
,
'U'
)。
注意:
s
可能同時含有大寫和小寫字母。
如果
a
和
b
相似,傳回
true
,否則,傳回
false
。
示例:
輸入:s = “book”
輸出:true
思路:
該題的就是讓我們周遊字元串,判斷字元串的前半段和後半段是否具有相同數目的元音字母,該題目主要考察兩點:
- 周遊字元串。
- 哈希表的使用。
- 将元音字母存儲到unordered_set容器當中。
- 周遊字元串的前半部分,統計元音字母的個數。
- 周遊字元串的後半部分,與前半部分的元音字母個數進行抵消。
- 若最終count被抵消為0,則說明該字元串前半段和後半段具有相同數目的元音字母。
class Solution {
public:
bool halvesAreAlike(string s) {
//1、将元音字母存儲到unordered_set容器中
string str = "aeiouAEIOU";
unordered_set<char> us(str.begin(), str.end());
int count = 0;
//2、周遊字元串的前半部分,統計元音字母個數
for (size_t i = 0; i < s.size() / 2; i++)
{
if (us.find(s[i]) != us.end())
count++;
}
//3、周遊字元串的後半部分,與前半部分的元音字母個數進行抵消
for (size_t i = s.size() / 2; i < s.size(); i++)
{
if (us.find(s[i]) != us.end())
count--;
}
//4、若最終count被抵消為0,則說明該字元串前半段和後半段具有相同數目的元音字母
return count == 0;
}
};