简单
相关标签
相关企业
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入: s = "egg", t = "add"
输出: true
示例 2:
输入: s = "foo", t = "bar"
输出: false
示例 3:
输入: s = "paper", t = "title"
输出: true
提示:
1 <= s.length <= 5 * 104t.length == s.lengths和t由任意有效的 ASCII 字符组成
题解:
bug: int hash[26] = {-1};这句话只会把第一个值显式赋值为-1,其他隐式赋值为0。同理: int hash[26] = {0};就是第一个显式赋值0,其他隐式自动赋值0。但是 int hash[26];这么写不会隐式赋值,都是随机值。
所以还是都写个循环赋值比较方便。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
char s[50000] = {'\0'};
char t[50000] = {'\0'};
int hash[26];
for (i = 0;i <= 25;i ++)
{
hash[i] = -1;
}
scanf("%s", s);
scanf("%s", t);
i = 0;
while (s[i] != '\0')
{
if (hash[s[i] - 'a'] < 0)
{
hash[s[i] - 'a'] = t[i] - 'a';
}
else
{
if (hash[s[i] - 'a'] != t[i] - 'a')
{
printf("false");
return 0;
}
}
i ++;
}
printf("true");
return 0;
}