205. 同构字符串

34 阅读1分钟

205. 同构字符串

简单

相关标签

premium lock icon相关企业

给定两个字符串 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 * 104
  • t.length == s.length
  • s 和 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;
}