题目描述
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.
题目大意:给定两个字符串s和t,判断它们是否同构。同构的意思是t可以由s替换字符得到
样例
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
python解法
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
S, T = {} ,{}
for i,(a,b) in enumerate(zip(s,t)):
if a not in S: S[a] = i
if b not in T: T[b] = i
return all([S[s[i]] == T[t[i]] for i in range(len(s))])
Runtime: 48 ms
Memory Usage: 14.3 MB
题后反思:
- 如果出现相同的字符,那么只保留第一次出现的字符的下标
- all函数是只有当可迭代对象中全部元素都为true时才返回true
C语言解法
bool isIsomorphic(char * s, char * t){
int str1[256]={'\0'},str2[256]={'\0'};
if (!strlen(s) || !strcmp(s, t))
return true;
int len = strlen(s);
for (int i=0;i<len;i++)
{
if (str1[s[i]] == '\0')
str1[s[i]] = i;
if (str2[t[i]] == '\0')
str2[t[i]] = i;
}
for (int i=0;i<len;i++)
{
if (str1[s[i]] != str2[t[i]])
return false;
}
return true;
}
Runtime: 4 ms, faster than 77.78% of C online submissions for Isomorphic Strings.
Memory Usage: 7.2 MB, less than 100.00% of C online submissions for Isomorphic Strings.
题后反思:无
文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步