leetcode290

LeetCode290----------Word Pattern

一个map是没办法搞定的,这是我一开始的思路,用一个map来保存char到string的映射,但是通过leetcode的Custom Testcase和单步调试就很容易得到该办法不行的结论。

于是。。。

这道题的关键就在于。。。。

两个map:

一个map用于保存StringToChar的对应关系

一个map用于保存CharToString的对应关系

最后返回的结果必须是两种情况求出来true 或 false 的与。

代码:

class Solution {
public:
	bool wordPattern(string pattern, string str) {
		map<string, char>strToChar;
		map<char, string>chToString;
		vector<string>myVec;
		stringstream strStream(str);
		string temp;
		if (pattern == "" || str == "")
			return false;
		/*全部转化为小写*/
		transform(str.begin(),str.end(),str.begin(),::tolower);
		transform(pattern.begin(), pattern.end(), pattern.begin(), ::tolower);
		/*通过stream将string按照空格分割并保存在容器中*/
		while (strStream >> temp)
			myVec.push_back(temp);

		if (myVec.size() != pattern.size())
			return false;
		//******************算法开始************************************
		for (int i = 0; i < pattern.size(); i++)
		{
			if (chToString.find(pattern[i]) == chToString.end())
			{
				chToString[pattern[i]] = myVec[i];//建立字符->string串的map映射
			}
			if (strToChar.find(myVec[i]) == strToChar.end())
			{
				strToChar[myVec[i]] = pattern[i];//建立string串->字符的map映射
			}
		}
		/*将映射关系按顺序存储在临时变量中*/
		string result = "";
		vector<string>resVec;
		for (int i = 0; i < pattern.size(); i++)
		{
			result += strToChar[myVec[i]];//将要与pattern匹配的临时变量
			resVec.push_back(chToString[pattern[i]]);//将要与str匹配的容器
		}
		return (result == pattern) && (resVec == myVec);//需要同时满足两个条件
	}
};


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值