这个题目貌似懂了,但有点还是不太明白,这个flag的具体作用,但是我旁边宿舍没有笔,所以说我明天需要把代码去写下来,明天去教室后研究研究怎么写
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s = "egg", t = "add"
输出:true
示例 2:
输入:s = "foo", t = "bar"
输出:false
示例 3:
输入:s = "paper", t = "title"
输出:true
以下是代码的书写
bool isIsomorphic(char* s, char* t) {
for (int i = 1; i < strlen(s); i++)
{
int finds = -1;
int findt = -1;
int flag = 0;//用于标记,用于优化时间
for (int j = i-1; j >= 0; j--)
{
if (s[j] == s[i])
{
finds = j;
flag = 1;
}
if (t[j] == t[i])
{
flag = 1;
findt = j;
}
//如果相等的原因不是因为 -1 == -1,则说明s和t找到的下标符合映射逻辑
if (flag == 1 && finds == findt) break;
//如果提早符合映射关系,则不需要继续循环了
}
if (finds != findt)return false;
}
return true;
}
他大概意思是 比如比较字符串S和T的时候,先进行一个外循环 比如循环S,然后接下来 如果S字符串的前面俩个是一样的话,那么把flag设置1 finds设置为j 也就是说设置成下一个字符串的开始,我重点是理解不了后面比较的过程,这个我还需要去深刻的去思索一下
评论 (0)