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

这篇文章探讨了如何通过遍历字符串并使用哈希表来检查给定偶数长度字符串s的前半部分a和后半部分b是否具有相同数量的元音字母。关键步骤包括创建元音集合、统计a和b中的元音、对比两者并返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给你一个偶数长度的字符串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,则说明该字符串前半段和后半段具有相同数目的元音字母。

代码如下:

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;
	}
};
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021dragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值