aboutsummaryrefslogtreecommitdiff
path: root/other/find_replace_pattern.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'other/find_replace_pattern.cpp')
-rw-r--r--other/find_replace_pattern.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/other/find_replace_pattern.cpp b/other/find_replace_pattern.cpp
new file mode 100644
index 0000000..a00bfcb
--- /dev/null
+++ b/other/find_replace_pattern.cpp
@@ -0,0 +1,32 @@
+#include "leetcode.h"
+
+class Solution {
+public:
+ vector<string> findAndReplacePattern(vector<string> &words, string pattern) {
+ ans.resize(0);
+ codex.clear();
+ cipher = pattern;
+ for (int i = 0; i < pattern.size(); i++)
+ cipher[i] = translate(cipher[i]);
+ for (auto &word : words)
+ compare(word);
+ return ans;
+ }
+
+private:
+ vector<string> ans;
+ unordered_map<char, char> codex;
+ string cipher;
+ char translate(char &c) {
+ if (codex.find(c) == codex.end())
+ codex[c] = (char)(97 + codex.size());
+ return codex[c];
+ }
+ void compare(string &word) {
+ codex.clear();
+ for (int i = 0; i < word.size(); i++)
+ if (translate(word[i]) != cipher[i])
+ return;
+ ans.push_back(word);
+ }
+};