问题描述
解题报告
该题是一道纯粹的数据结构题目,基本没有涉及算法设计。
使用
m
a
p
map
map 结构保证同一个字符能够映射到同一个字母里;
使用
s
e
t
set
set 结构保证没有哪两个字母映射到同一个字母上。如果某个模式字母尚未建立映射关系,但是即将建立映射关系的value值已经出现过,则终止检测。
实现代码
class Solution {
public:
vector<string> findAndReplacePattern(vector<string>& words, string pattern) {
vector<string> ans;
int size1=words.size();
int size2=pattern.size();
for(int i=0;i<size1;i++){
map<char,char>m;
set<char>s;
int counter=0;
for(int j=0;j<pattern.size();j++){
map<char,char>::iterator it=m.find(pattern[j]);
if(it==m.end()&&s.find(words[i][j])==s.end()){
s.insert(words[i][j]);
m[pattern[j]]=words[i][j];
counter++;
}
else if((it==m.end()&&s.find(words[i][j])!=s.end())||(it->second!=words[i][j])){
break;
}
else{
counter++;
}
}
if(counter==size2){
ans.push_back(words[i]);
}
}
return ans;
}
};