Leetcode—–Isomorphic Strings
链接:https://leetcode.com/problems/isomorphic-strings/
题目:
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.
For example,
Given “egg”, “add”, return true.
Given “foo”, “bar”, return false.
Given “paper”, “title”, return true.
Thought:
字符串同构有两种情况:每个字符串中没有相同的字符;若该字符串中有相同的字符,则另一字符串中相同位置也有相同的字符。
而字符串函数strchr的功能是在一个字符串中找到与该字符的第一个匹配之处,函数原型如下:
char* strchr(char* str, char c)
这样可以搞两个指针分别指向这两个字符串,判断位置是否相等,可以和字符串的首字符比较。若出现相同字符,则两字符串中的该字符离首字符的距离应该相等。
Solution:
// 假设字符串长度相等
bool isIsomorphic(char* s, char* c)
{
char* pTos = s;
char* pTot = t;
if ((NULL == s) || (NULL == t))
{
return false;
}
while (*pTos != NULL)
{
if ((strchr(s, *pTos) - s) != (strchr(t, *pTot) - t))
{
return false;
}
pTos++;
pTot++;
}
return true;
}
别人家的代码:
bool isIsomorphic(char* s, char* c)
{
int length = strlen(s);
// 定义s和t的辅助数组
int auxOfs[256] = {0};
int auxOft[256] = {0};
for (int i = 0 ; i < length; i++)
{
if (auxOfs[s[i]] != auxOft[t[i]])
{
return false;
}
auxOfs[s[i]] = i + 1;
auxOft[t[i]] = i + 1;
}
return true;
}