diff --git a/Algorithms/205. Isomorphic Strings/205. Isomorphic Strings.go b/Algorithms/205. Isomorphic Strings/205. Isomorphic Strings.go new file mode 100644 index 00000000..0154ad08 --- /dev/null +++ b/Algorithms/205. Isomorphic Strings/205. Isomorphic Strings.go @@ -0,0 +1,29 @@ +package leetcode + +func isIsomorphic(s string, t string) bool { + strList := []byte(t) + patternByte := []byte(s) + if (s == "" && t != "") || (len(patternByte) != len(strList)) { + return false + } + + pMap := map[byte]byte{} + sMap := map[byte]byte{} + for index, b := range patternByte { + if _, ok := pMap[b]; !ok { + if _, ok = sMap[strList[index]]; !ok { + pMap[b] = strList[index] + sMap[strList[index]] = b + } else { + if sMap[strList[index]] != b { + return false + } + } + } else { + if pMap[b] != strList[index] { + return false + } + } + } + return true +} diff --git a/Algorithms/205. Isomorphic Strings/205. Isomorphic Strings_test.go b/Algorithms/205. Isomorphic Strings/205. Isomorphic Strings_test.go new file mode 100644 index 00000000..a8913622 --- /dev/null +++ b/Algorithms/205. Isomorphic Strings/205. Isomorphic Strings_test.go @@ -0,0 +1,58 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question205 struct { + para205 + ans205 +} + +// para 是参数 +// one 代表第一个参数 +type para205 struct { + one string + two string +} + +// ans 是答案 +// one 代表第一个答案 +type ans205 struct { + one bool +} + +func Test_Problem205(t *testing.T) { + + qs := []question205{ + + question205{ + para205{"egg", "add"}, + ans205{true}, + }, + + question205{ + para205{"foo", "bar"}, + ans205{false}, + }, + + question205{ + para205{"paper", "title"}, + ans205{true}, + }, + + question205{ + para205{"", ""}, + ans205{true}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 205------------------------\n") + + for _, q := range qs { + _, p := q.ans205, q.para205 + fmt.Printf("【input】:%v 【output】:%v\n", p, isIsomorphic(p.one, p.two)) + } + fmt.Printf("\n\n\n") +} diff --git a/Algorithms/205. Isomorphic Strings/README.md b/Algorithms/205. Isomorphic Strings/README.md new file mode 100644 index 00000000..bcb5b464 --- /dev/null +++ b/Algorithms/205. Isomorphic Strings/README.md @@ -0,0 +1,48 @@ +# [205. Isomorphic Strings](https://leetcode.com/problems/isomorphic-strings/) + +## 题目 + +Given two strings s and t, determine if they are isomorphic. + +Two strings are isomorphic if the characters in s can be replaced to get t. + +All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself. + +Example 1: + +```c +Input: s = "egg", t = "add" +Output: true +``` + +Example 2: + +```c +Input: s = "foo", t = "bar" +Output: false +``` + +Example 3: + +```c +Input: s = "paper", t = "title" +Output: true +``` + +Note: + +You may assume both s and t have the same length. + + + + +## 题目大意 + +这道题和第 290 题基本是一样的。第 290 题是模式匹配,这道题的题意是字符串映射,实质是一样的。 + +给定一个初始字符串串,判断初始字符串是否可以通过字符映射的方式,映射到目标字符串,如果可以映射,则输出 true,反之输出 false。 + +这道题做法和第 290 题基本一致。 + + +