Back to Leetcode Go

205. Isomorphic Strings

website/content.en/ChapterFour/0200~0299/0205.Isomorphic-Strings.md

1.7.971.7 KB
Original Source

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

go

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
}