LeetCode 205. Isomorphic Strings
考点 | 难度 |
---|---|
Hash Table | Easy |
题目
Given two strings s
and t
, determine if they are isomorphic.
Two strings s
and t
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.
思路
这道题一直没想到解法所以去看了solution里面的dictionary解法。
首先需要两个dictionaries,dict1
从s
到t
,dict2
从t
到s
。对于两个string里的任意一个字母sn
或tn
,如果两个dictionaries里面都没有map到则在两个dictionaries里面各新建一个mapping。其他情况(dict1
中没有dict1[sn] = st
或dict2
中没有dict2[st] = sn
)返回false
。
答案
public boolean isIsomorphic(String s, String t) {
int[] dict1 = new int[256];
Arrays.fill(dict1, -1);
int[] dict2 = new int[256];
Arrays.fill(dict2, -1);
for (int i = 0; i < s.length(); ++i) {
char sn = s.charAt(i);
char tn = t.charAt(i);
// Case 1: No mapping exists in either of the dictionaries
if (dict1[sn] == -1 && dict2[tn] == -1) {
dict1[sn] = tn;
dict2[tn] = sn;
}
// Case 2: mapping doesn't exist in one of the dictionaries or doesn't match
else if (!(dict1[sn] == tn && dict2[tn] == sn)) {
return false;
}
}
return true;
}