Leetcode 290: word sum

// 此题需要注意的是,哈希表在存储的时候插入顺序可能是随机的,如果此时要求两个表的key的相应位置一一对应不可行,需要以value为键值再建一个表 
class Solution {
public:
    bool wordPattern(string pattern, string str) {
	vector<string> str_vec;
	while (str.find(' ') != -1)
	{
		str_vec.push_back(str.substr(0, str.find(' ')));
		str = str.substr(str.find(' ') + 1, str.length() - str.find(' ') - 1);
	}
	str_vec.push_back(str);
	for (int i = 0; i < str_vec.size(); i++)
		cout << str_vec[i].c_str() << ' ';
	if (str_vec.size() != pattern.length())
		return false;

	unordered_map<char, int> pattern_map;
	unordered_map<string, int> str_map;
	for (int i = 0; i<pattern.size(); i++)
	{
		if (pattern_map.find(pattern[i]) == pattern_map.end())
			pattern_map.insert(make_pair(pattern[i], i));
		else
			pattern_map[pattern[i]] = pattern_map[pattern[i]] * 10 + i;
	}
	for (int i = 0; i<str_vec.size(); i++)
	{
		if (str_map.find(str_vec[i]) == str_map.end())
			str_map.insert(make_pair(str_vec[i], i));
		else
			str_map[str_vec[i]] = str_map[str_vec[i]] * 10 + i;
	}
	unordered_map<char, int>::iterator pattern_it = pattern_map.begin();
	unordered_map<string, int>::iterator str_it = str_map.begin();

	if (pattern_map.size() != str_map.size())
		return false;

	unordered_map<int, int> pattern_pos;
	unordered_map<int, int> str_pos;
	for (; pattern_it != pattern_map.end() && str_it != str_map.end(); pattern_it++, str_it++)
	{
		pattern_pos.insert(make_pair(pattern_it->second, 1));
		str_pos.insert(make_pair(str_it->second, 1));
	}

	unordered_map<int, int>::iterator pattern_pos_it = pattern_pos.begin();
	for (; pattern_pos_it != pattern_pos.end(); pattern_pos_it++)
		if (str_pos.find(pattern_pos_it->first) == str_pos.end())
			return false;
	return true;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值