xqn2017

导航

290. Word Pattern

原文题目:

290. Word Pattern

读题:

看到这种一一映射,很自然想到STL中的map容器

具体解题思路看代码注释

class Solution 
{
public:
	bool wordPattern(string pattern, string str) 
	{
		unordered_map <char,string> mapleft;
		unordered_map <string,char> mapright;
		vector <string> vec;
		int i = 0;
		int j = 0;
		//将字符串按照空格分割放入容器vec中
		for(;i<str.size();i++)
		{
			if(' '==str[i])
			{
				string tempstr = str.substr(j,i-j);
				vec.push_back(tempstr);
				j = i +1;
			}
			if(i == str.size() - 1)
			{
				string endstr = str.substr(j,i-j+1);
				vec.push_back(endstr);
			}
		}

		if(pattern.size()!=vec.size()) return false;
		//建立两者之间的正序和反序的map映射
		for(i = 0;i <pattern.size();i++)
		{
			//若原map中没有则加入
			if(mapleft.find(pattern[i]) == mapleft.end()&&mapright.find(vec[i]) == mapright.end())
			{
				mapleft.insert(make_pair(pattern[i],vec[i]));
				mapright.insert(make_pair(vec[i],pattern[i]));
			}
			//查找map看是否一一相对应
			else if(mapleft[pattern[i]]!=vec[i] || mapright[vec[i]]!=pattern[i])
			{
				return false;
			};
		}
		return true;

	}
};

  

posted on 2018-02-02 19:34  xqn2017  阅读(136)  评论(0编辑  收藏  举报