Leetcode学习笔记-205-同构字符串

题目:
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

1
2
3
4
5
6
7
8
9
10
11
示例 1:
输入: s = "egg", t = "add"
输出: true

示例 2:
输入: s = "foo", t = "bar"
输出: false

示例 3:
输入: s = "paper", t = "title"
输出: true



解题思路:

利用一个map,两个字符串对应位置的字符构成键值对添加到map中,若s[i]已经在键表存在并且值并不是t[i],则不是同构;若s[i]不存在但t[i]已经存在于值表中也不是同构。

Java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public boolean isIsomorphic(String s, String t) {

if (s == "" || s.length() == 1)
return true;
Map<Character, Character> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
if (map.containsKey(s.charAt(i))) {
if (map.get(s.charAt(i)) != t.charAt(i))
return false;
} else if (map.containsValue(t.charAt(i)))
return false;
map.put(s.charAt(i), t.charAt(i));
}
return true;
}

Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def isIsomorphic(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if s == "" or len(s) == 1:
return True
map = {}
for i in range(len(s)):
if s[i] in map:
if map[s[i]] != t[i]:
return False
elif t[i] in map.values():
return False
map[s[i]] = t[i]
return True
posted @ 2019-07-06 17:53  天涯海角路  阅读(249)  评论(0)    收藏  举报