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

给你一个偶数长度的字符串s,将其拆分成长度相同的两半,前一半为a,后一半为b
两个字符串相似的前提是它们都含有相同数目的元音('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')。
注意:s可能同时含有大写和小写字母。
如果ab相似,返回true,否则,返回false
示例:
?输入:s = “book”
?输出:true
思路:
该题的就是让我们遍历字符串,判断字符串的前半段和后半段是否具有相同数目的元音字母,该题目主要考察两点:

  • 遍历字符串。
  • 哈希表的使用。
解题步骤如下:
  1. 将元音字母存储到unordered_set容器当中。
  2. 遍历字符串的前半部分,统计元音字母的个数。
  3. 遍历字符串的后半部分,与前半部分的元音字母个数进行抵消。
  4. 若最终count被抵消为0,则说明该字符串前半段和后半段具有相同数目的元音字母。
【leetcode|leetcode1704. 判断字符串的两半是否相似】代码如下:
class Solution { public: bool halvesAreAlike(string s) { //1、将元音字母存储到unordered_set容器中 string str = "aeiouAEIOU"; unordered_set 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; } };

    推荐阅读