给定两个字符串 s
和 t
,判断它们是否是同构的。
如果 s
中的字符可以按某种映射关系替换得到 t
,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s = "egg",t = "add"输出:true
示例 2:
输入:s = "foo", t = "bar"输出:false
示例 3:
输入:s = "paper", t = "title"输出:true
#include <stdio.h>
#include <stdbool.h>
#include <string.h>bool isIsomorphic(char* s, char* t)
{if(strlen(s) != strlen(t)){return false;//如果两个字符串长度不相同,直接返回错误}for(int i = 1;i < strlen(s);i++)//i从1开始循环{int flag = 0;//设置一个标志int s_t = 0;//s字符串的当前位置下标int t_t = 0;//t字符串的当前位置下标for(int j = i - 1;j >= 0;j--)//从i-1到0一一遍历{if(s[j] == s[i]){s_t = j;flag = 1;//如果某个s[j] == s[i],将标志设为1,s的下标改为j}if(t[j] == t[i]){t_t = j;flag = 1;//同时检测t字符串,如果某个t[j] == t[i],将标志设为1,t的下标改为j}if(flag == 1 && s_t == t_t)//双重判断,如果都符合,可以提前跳出循环{break;}}if(s_t != t_t)//最后一轮循环后,如果下表不相同,返回错误{return false;}}return true;//否则返回正确
}int main()
{char ptr[] = "alpkop";char str[] = "pdgfyg";printf("%d\n",isIsomorphic(ptr, str));return 0;
}