给定一个模式串pattern和一个字符串str,请问str和pattern是否遵循相同的模式。
这里遵循模式指的是一个完全匹配,即在pattern中的每个不同的字母和str中每个非空的单词之间有一个双向映射的模式对应。
样例
样例1
输入: pattern = "abba" and str = "dog cat cat dog"
输出: true
解释:
str的模式是 abba
样例2
输入: pattern = "abba" and str = "dog cat cat fish"
输出: false
解释:
str的模式是 abbc
样例3
输入: pattern = "aaaa" and str = "dog cat cat dog"
输出: false
解释:
str的模式是 abba
样例4
输入: pattern = "abba" and str = "dog cat cat fish"
输出: false
解释:
str的模式是 abbc
注意事项
您可以认为模式串pattern只包含小写字母,而str包含由单个空间分隔的小写单词组成。
class Solution {
public:
/**
* @param pattern: a string, denote pattern string
* @param teststr: a string, denote matching string
* @return: an boolean, denote whether the pattern string and the matching string match or not
*/
bool wordPattern(string &pattern, string &teststr) {
// write your code here
char temp='a';
string result = "";
bool judge=true;
std::vector<string> str;
int len=teststr.size();
for (int i = 0; i < len; i++) {//将teststr每个单词放进vector中
/* code */
if(teststr[i]!=' ')result+=teststr[i];
else {str.push_back(result);result="";}
}
str.push_back(result);//最后一个单词无法检测到空格,单独放入
int len1=str.size();
int len2=pattern.size();
if(len1!=len2) return false;
for (int i = 0; i < len1; i++) {
/* code */
for (int j = i+1; j < len1; j++) {
/* code */
if(pattern[i]==pattern[j]&&str[i]!=str[j]) {judge=false;break;}//如果pattern中两个字符相同,但vector中单词不同,返回false
if(pattern[i]!=pattern[j]&&str[i]==str[j]){ judge=false;break;}//如果pattern中两个字符不同,但vector中单词相同,返回false
}
if(judge==false) break;
}
return judge;
}
};