已知字符串pattern与字符串str,确认str是否与pattern匹配。str与pattern匹配代表字符串str中的单词与pattern中的字符一一对应。(其中pattern中只包含小写字符,str中的单词只包含小写字符,使用空格分隔。)
例如:
pattern=“abba”, str="dog cat cat dog"匹配
pattern=“abba”, str="dog cat cat fish"不匹配
pattern=“aaaa”, str="dog cat cat dog"不匹配
pattern=“abba”, str="dog dog dog dog"不匹配
#include <string>
#include <map>
class Solution
{
public:
Solution() {}
~Solution() {}
bool wordPattern(std::string pattern, std::string str)
{
std::map<std::string, char> word_map;
char used[128] = { 0 };
std::string word;
int pos = 0;
str.push_back(' ');
for (int i = 0; i < str.length(); i++)
{
if (str[i] == ' ')
{
if (pos == pattern.length())
{
return false; //说明pattern的字母比str的单词少
}
if (word_map.find(word) == word_map.end())
{
if (used[pattern[pos]])
{
return false;
}
word_map[word] = pattern[pos];
used[pattern[pos]] = 1;
}
else
{
if (word_map[word] != pattern[pos])
{
return false;
}
}
word = "";
pos++;
}
else
{
word += str[i];
}
}
if (pos!=pattern.length())
{
return false; //有多余的pattern字符
}
return true;
}
};
int main()
{
std::string pattern = "abba";
std::string str = "dog cat cat dog";
Solution solve;
printf("%d\n", solve.wordPattern(pattern, str));
return 0;
}
运行结果为:
1