突破编程_C++_字符串算法(判断字符串是否包含)

1 算法题 :判断一个字符串是否包含另一个字符串的所有字符(不一定连续)

1.1 题目含义

判断一个字符串(称为“主字符串”或“大字符串”)是否包含另一个字符串(称为“子字符串”或“小字符串”)的所有字符,且不论这些字符在主字符串中的顺序和连续性。换句话说,我们要确认子字符串的每一个字符至少在主字符串中出现一次。

1.2 示例

示例 1:
输入:

  • 主字符串: “abcdefghijklmnopqrstuvwxyz”
  • 子字符串: “abcde”

输出: true
解释: 主字符串包含子字符串的所有字符。

示例 2:
输入:

  • 主字符串: “mississippi”
  • 子字符串: “missip”

输出: true
解释: 尽管 “missip” 在主字符串中不是连续的,但主字符串包含子字符串的所有字符。

示例 3:
输入:

  • 主字符串: “abcdefg”
  • 子字符串: “defghijklmnop”

输出: false
解释: 主字符串不包含子字符串的所有字符,因为 “hijklmnop” 中的字符在主字符串中没有出现。

2 解题思路

解题思路如下:

(1)初始化哈希表:
在 C++ 中,我们可以使用std::unordered_map来作为哈希表。首先,遍历子字符串,对于每个字符,我们在unordered_map中增加其计数。

(2)遍历主字符串并更新哈希表:
然后,遍历主字符串。对于主字符串中的每个字符,我们检查它是否在unordered_map中。如果在,则将其对应的计数减一。如果不在,说明主字符串中缺少该字符,因此可以立即返回false。

(3)检查哈希表:
在遍历完主字符串后,我们检查 unordered_map 中所有字符的计数是否都已经归零。如果所有计数都为零,说明主字符串包含了子字符串的所有字符,返回 true;如果存在任何非零计数,说明主字符串缺少某些字符,返回 false。

(4)返回结果:
根据unordered_map的状态,返回相应的布尔值。

3 算法实现代码

3.1 使用哈希表

如下为算法实现代码:

#include <iostream>  
#include <unordered_map>  
#include <string>  

class Solution
{
   
   
public:
	bool isContainsAllCharacters(const std::string& mainString, const std::string& subString) {
   
   
		// 初始化哈希表  
		std::unordered_map<char, int> charCounts;
		for (char c : subString) {
   
   
			charCounts[c]++;
		}

		// 遍历主字符串并更新哈希表  
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值