Word Pattern(C++单词规律)

解题思路:

(1)因为需要两两对应,因此使用map或者unordered_map,类型<char,string>

(2)遍历,每次查找在map中,是否同时存在pattern[i]和res[i](res表示切分后的字符串数组)

(3)若key存在,判断该key的value与res[i]是否相等,不等返回falsle

(4)若key不存在,判断res[i]是否存在map中,存在返回false

(5)若两者均不存在,入map

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        //切分字符串
		vector<string> res; 
	    string result; 
	    stringstream input(str);
	    while(input>>result) {
	    	res.push_back(result);
		}
		/*
		for (auto w:res) {
			cout<<w<<endl;
		}*/
		if (res.size()!=pattern.length()) return false;
		unordered_map<char,string> mymap;
		for(int i=0;i<pattern.length();i++) {
			if(mymap.find(pattern[i])==mymap.end()) { // key 不存在 
				if (!find_value(mymap,res[i])) { // value 不存在 
					mymap[pattern[i]]=res[i];
				} else return false; 
				
			} else { //存在判断与现有的是否相等 
				if (mymap[pattern[i]]!=res[i]) return false;
			}
		}
		
		return true;
    }
    
    bool find_value(unordered_map<char,string> &mymap,const string &value) {
    	for (auto w:mymap) {
    		if (w.second==value) return true;
		}
		return false;
	} 
	
};
发布了302 篇原创文章 · 获赞 277 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/coolsunxu/article/details/105592683