205. Isomorphic Strings #
Problem #
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:
Input: s = "egg", t = "add"
Output: true
Example 2:
Input: s = "foo", t = "bar"
Output: false
Example 3:
Input: s = "paper", t = "title"
Output: true
Note:
You may assume both s and t have the same length.
Problem Summary #
This problem is basically the same as Problem 290. Problem 290 is pattern matching, while the meaning of this problem is string mapping; essentially they are the same.
Given an initial string, determine whether the initial string can be mapped to the target string through character mapping. If it can be mapped, output true; otherwise, output false.
Solution Approach #
The approach to this problem is basically the same as Problem 290.
Code #
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
}