-
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
-
示例1:
输入: pattern = “abba”, s = “dog cat cat dog”
输出: true -
示例 2:
输入:pattern = “abba”, s = “dog cat cat fish”
输出: false -
示例 3:
输入: pattern = “aaaa”, s = “dog cat cat dog”
输出: false
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
#include <stdio.h>
#include <algorithm>
#include<vector>
#include<queue>
#include<iostream>
#include<memory>
#include <unordered_map>
using namespace std;
class Solution {
public:
queue<string> q;
unordered_map<string,char> mymap;
bool wordPattern(string pattern ,string s) {
s.push_back(' ');
string sub_s ="";
for(int i=0;i<s.size();i++){// make a queue
if(s[i]!=' '){
sub_s.push_back(s[i]);
}else{
q.push(sub_s);
sub_s ="";
}
}
int q_size= q.size();
if(q_size != pattern.size()){
return false;
}
for(int j=0;j<q_size;j++){
string cur = q.front();
q.pop();
if(mymap.find(cur)== mymap.end()){
mymap[cur] = pattern[j];
} else{
if(mymap[cur] != pattern[j]){return false;}
}
}
return true;
}
};
int main()
{
//Solution *myslo = new Solution();
unique_ptr<Solution> myslo = unique_ptr<Solution>(new Solution());
string pattern = "abba";
string s = "dog cat cat dog";
bool res = myslo->wordPattern(pattern,s);
cout<<"*************************************************************"<<endl;
cout<<res<<endl;
cout<<"*************************************************************"<<endl;
//delete myslo;
return 0;
}
该代码实现了一个C++函数,用于检查给定的字符串s是否遵循由pattern定义的模式。它使用队列和哈希映射来处理单词和模式之间的关系,如果存在不匹配则返回false,否则返回true。示例用法展示了如何判断输入字符串是否符合模式。
161

被折叠的 条评论
为什么被折叠?



