【LeetCode】单词规律

这篇博客介绍了一种利用哈希表和集合解决字符串与给定模式匹配的方法。首先通过分隔字符串得到单词,然后比较模式字符与单词之间的对应关系,借助哈希表存储模式字符到单词的映射,并用集合去重,确保每个模式字符只对应一个单词。如果遇到不匹配的情况,则返回false,否则返回true。这种方法有效地检查了字符串是否遵循给定的模式。
摘要由CSDN通过智能技术生成

题目

给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

在这里插入图片描述
这个题用一个哈希表和一个set就可以解决

//将字符串分隔开
vector<string> ReturnString(string s) {
	vector<string> ans;
	int start = 0;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == ' ') {
			ans.push_back(s.substr(start, i - start));
			start = i + 1;
		}
		if (i == s.size() - 1) {
			ans.push_back(s.substr(start, i - start + 1));
		}
	}
	return ans;
}
bool wordPattern(string pattern, string s) {
	vector<string> strs = ReturnString(s);
	map<char, string> hash;
	set<string> ishavestr;
	if (s.size() != pattern.size()) {
		return false;
	}
	for (int i = 0; i < strs.size(); i++) {
		//哈希负责对应关系,set负责去重
		if (!hash.count(pattern[i]) && !ishavestr.count(strs[i])) {
			hash[pattern[i]] = strs[i];
			ishavestr.insert(strs[i]);
		}
		else if (hash[pattern[i]] != strs[i]) {
			return false;
		}
	}
	return true;
}

在这里插入图片描述

希望我所写的对大家有帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值