Leetcode Word Pattern ,本算法关键在于使用map进行双向映射,相关cpp代码如下:
#include<iostream>
#include<vector>
#include<map>
#include<string>
using namespace std;
class solution {
public:
bool wordpattern(string pattern, string str) {
// pattern to element reflection
map<char, string> patternmap;
// element to pattern reflection
map<string, char> elementmap;
vector<string> elements;
splitstring(elements, str);
if (elements.size() != pattern.length()) {
return false;
}
for (int i = 0; i < elements.size(); i ++) {
if (patternmap.find(pattern[i]) == patternmap.end() && \
elementmap.find(elements[i]) == elementmap.end()) {
patternmap[pattern[i]] = elements[i];
elementmap[elements[i]] = pattern[i];
} else if (patternmap.find(pattern[i]) == patternmap.end() || \
elementmap.find(elements[i]) == elementmap.end()) {
return false;
}
if (patternmap[pattern[i]] != elements[i]) {
return false;
}
}
return true;
}
void splitstring(vector<string> &ele, string str) {
int pre = 0;
int end = 0;
while (end < str.length()) {
if (str[end] == ' ') {
ele.push_back(str.substr(pre, end - pre));
pre = end + 1;
}
end ++;
}
if (pre != end) {
ele.push_back(str.substr(pre, end - pre));
}
}
};
int main(int argc, char* argv[]) {
Solution so;
bool re = so.wordPattern(argv[1], argv[2]);
cout<<"result: "<<re<<endl;
return 0;
}