题目:
Given two strings
s
andt
, 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 boths
andt
have the same length.
解释:
在python中一个字典做就行了,因为python可以取出一个字典的所有value,但是这道题目其实应该用两个字典做,而且用两个字典做速度更快。
一个字典,python代码:
class Solution(object):
def isIsomorphic(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
_dict={}
for i in xrange(len(s)):
if s[i] not in _dict and t[i] not in _dict.values():
_dict[s[i]]=t[i]
else:
if s[i] not in _dict or _dict[s[i]]!=t[i]:
return False
return True
两个字典:
python代码;
class Solution:
def isIsomorphic(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
s_dict={}
t_dict={}
for i in range(len(s)):
if s[i] not in s_dict:
s_dict[s[i]]=t[i]
else:
if s_dict[s[i]]==t[i]:
continue
else:
return False
if t[i] in t_dict:
if t_dict[t[i]]!=s[i]:
return False
else:
t_dict[t[i]]=s[i]
return True
c++代码:
#include <map>
using namespace std;
class Solution {
public:
bool isIsomorphic(string s, string t) {
map<char,char>s_map;
map<char,char>t_map;
for (int i=0;i<s.size();i++)
{
if (!s_map.count(s[i]))
s_map[s[i]]=t[i];
else
{
if (s_map[s[i]]==t[i])
continue;
else
return false;
}
if(t_map.count(t[i]))
{
if (t_map[t[i]]!=s[i])
return false;
}
else
t_map[t[i]]=s[i];
}
return true;
}
};
总结:
看到一一对应的关系就想到字典。