LeetCode 205. Isomorphic Strings; 290. Word Pattern; 890. Find and Replace Pattern
Posted 約束の空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 205. Isomorphic Strings; 290. Word Pattern; 890. Find and Replace Pattern相关的知识,希望对你有一定的参考价值。
这几道题都是pattern的题目, Isomorphic Strings 和 Word Pattern 是完全一样的问题,Find and Replace Pattern 本质也一样。
第一种思路,建立两个map,将字符(或字符串)映射到所在的位置 i+1,每次只需要判断 map1[a]==map2[b],大概思路是这样。
bool isIsomorphic(string s, string t) { char map_s[128] = { 0 }; char map_t[128] = { 0 }; int len = s.size(); for (int i = 0; i < len; ++i) { if (map_s[s[i]]!=map_t[t[i]]) return false; map_s[s[i]] = i+1; map_t[t[i]] = i+1; } return true; }
我个人比较倾向第二种思路,a->b ,每个a[i]只能对应b[i],因此我们建立一个hashtable,hash[b[i]]只可能是一个数。但是这样存在一个问题,如果如果同时a->b a->c,也是不行的。可以再建立一个映射b->a的hashtable,也可以建立一个set,每个a[i]只能建立一次映射,用set保存。
205. Isomorphic Strings
class Solution { public: bool isIsomorphic(string s, string t) { //s->t hash[t] is unique, s can only map to one char if (s.size()!=t.size()) return false; unordered_map<char,char> hash; unordered_set<char> a; for (int i=0;i<s.size();++i){ if (hash.count(t[i])){ if (hash[t[i]]!=s[i]) return false; }else{ hash.insert({t[i],s[i]}); if (a.count(s[i])) return false; else a.insert(s[i]); } } return true; } };
290. Word Pattern
class Solution { public: bool wordPattern(string pattern, string str) { istringstream in(str); unordered_map<string,char> hash; unordered_set<char> s; int i=0; for (string word;in>>word;++i){ if (i==pattern.size()) return false; if (hash.count(word)){ if (hash[word]!=pattern[i]) return false; }else{ hash[word] = pattern[i]; if (s.count(pattern[i])) return false; else s.insert(pattern[i]); } } return i==pattern.size(); } };
890. Find and Replace Pattern
class Solution { public: vector<string> findAndReplacePattern(vector<string>& words, string pattern) { vector<string> res; for (string word:words){ if (word.size()!=pattern.size()) continue; unordered_map<char,char> hash; unordered_set<char> s; bool flag=true; for (int i=0;i<pattern.size();++i){ // pattern->word hash[word[i]] unique if (!hash.count(word[i])){ hash.insert({word[i],pattern[i]}); if (s.count(pattern[i])) {flag=false; break;} else s.insert(pattern[i]); } else if (hash[word[i]]==pattern[i]) continue; else{ flag = false; break; } } if (flag) res.push_back(word); } return res; } };
以上是关于LeetCode 205. Isomorphic Strings; 290. Word Pattern; 890. Find and Replace Pattern的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 205 Isomorphic Strings
205. Isomorphic Strings(LeetCode)
LeetCode 205. Isomorphic Strings
LeetCode 205 Isomorphic Strings