#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <sstream>
bool findMatch(char * s1, std::string s2){
std::map<char, std::string> wordsMap;
std::istringstream iss(s1);
std::string word;
for (std::string::size_type i = 0; i < s2.size(); ++i)
{
if (!(iss >> word))
return false; // more letters than wordsMap
std::string& mappingChar = wordsMap[s2[i]];
if (mappingChar == "")
mappingChar = word; // first time we've seen letter, remember associated word
else if (mappingChar != word)
return false; // different word for same letter
}
return !(iss >> word); // check no surplus wordsMap
}
int main(int argc, char * argv[]){
bool b = findMatch("red blue blue red red yellow yellow", "abbaacd");
std::cout << b << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3N0cmVhbT4KCmJvb2wgZmluZE1hdGNoKGNoYXIgKiBzMSwgc3RkOjpzdHJpbmcgczIpewogICAgc3RkOjptYXA8Y2hhciwgc3RkOjpzdHJpbmc+IHdvcmRzTWFwOwoJc3RkOjppc3RyaW5nc3RyZWFtIGlzcyhzMSk7CglzdGQ6OnN0cmluZyB3b3JkOwoJZm9yIChzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgczIuc2l6ZSgpOyArK2kpCgl7CgkJaWYgKCEoaXNzID4+IHdvcmQpKQoJCQlyZXR1cm4gZmFsc2U7IC8vIG1vcmUgbGV0dGVycyB0aGFuIHdvcmRzTWFwCgkJc3RkOjpzdHJpbmcmIG1hcHBpbmdDaGFyID0gd29yZHNNYXBbczJbaV1dOwoJCWlmIChtYXBwaW5nQ2hhciA9PSAiIikKCQkJbWFwcGluZ0NoYXIgPSB3b3JkOyAvLyBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gbGV0dGVyLCByZW1lbWJlciBhc3NvY2lhdGVkIHdvcmQKCQllbHNlIGlmIChtYXBwaW5nQ2hhciAhPSB3b3JkKQoJCQlyZXR1cm4gZmFsc2U7IC8vIGRpZmZlcmVudCB3b3JkIGZvciBzYW1lIGxldHRlcgoJfQoJcmV0dXJuICEoaXNzID4+IHdvcmQpOyAvLyBjaGVjayBubyBzdXJwbHVzIHdvcmRzTWFwCn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICogYXJndltdKXsKCWJvb2wgYiA9IGZpbmRNYXRjaCgicmVkIGJsdWUgYmx1ZSByZWQgcmVkIHllbGxvdyB5ZWxsb3ciLCAiYWJiYWFjZCIpOwoJc3RkOjpjb3V0IDw8IGIgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=