0
点赞
收藏
分享

微信扫一扫

leetcode1704. 判断字符串的两半是否相似


给你一个偶数长度的字符串​​s​​​,将其拆分成长度相同的两半,前一半为​​a​​​,后一半为​​b​​​。
两个字符串相似的前提是它们都含有相同数目的元音(​​​'a'​​​, ​​'e'​​​, ​​'i'​​​, ​​'o'​​​, ​​'u'​​​, ​​'A'​​​, ​​'E'​​​, ​​'I'​​​, ​​'O'​​​, ​​'U'​​)。

注意:​​s​​可能同时含有大写和小写字母。

如果​​a​​​和​​b​​​相似,返回​​true​​​,否则,返回​​false​​。

示例:
 输入:s = “book”
 输出:true

思路:
该题的就是让我们遍历字符串,判断字符串的前半段和后半段是否具有相同数目的元音字母,该题目主要考察两点:

  • 遍历字符串。
  • 哈希表的使用。

解题步骤如下:

  1. 将元音字母存储到unordered_set容器当中。
  2. 遍历字符串的前半部分,统计元音字母的个数。
  3. 遍历字符串的后半部分,与前半部分的元音字母个数进行抵消。
  4. 若最终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;
}
};


举报

相关推荐

0 条评论