2022年11月20日 星期日

[205] Isomorphic Strings

看起來不難但是一直寫不出來 囧
寫出來之後又比人家慢很多?!
搞半天竟然是!!!for 裡面的 strlen(s) 要搬出來外面先存一個len ?!?!?!
我還以為for的第一行只做一次, 後面只有加加或減減而已QQ
真是未夠班啊.......
先貼一個原始版本

bool isIsomorphic(char * s, char * t){
int *alphaS=malloc (sizeof(int)*128);
memset(alphaS, -1, sizeof(int)*128);
int *alphaT=malloc (sizeof(int)*128);
memset(alphaT, -1, sizeof(int)*128);
int len = strlen(s);

for (int i=0;i<len;i++)
{
if (alphaS[s[i]-' '] <0 )
{
alphaS[s[i]-' ']=t[i]-' ';
}
else if (alphaS[s[i]-' '] != t[i]-' ')
{
return false;
}
if (alphaT[t[i]-' '] < 0)
{
alphaT[t[i]-' ']=s[i]-' ';
}
else if (alphaT[t[i]-' ']!=s[i]-' ')
{
return false;
}
}
return true;
}


bool isIsomorphic(char * s, char * t){
char alphaS[128] = {0};
char alphaT[128] = {0};
int len = strlen(s);
for (int i=0;i<len;i++)
{
if ((alphaS[s[i]] !=0) && (alphaS[s[i]] != t[i]))
return false;
if ( (alphaT[t[i]] !=0)&& (alphaT[t[i]]!=s[i]))
return false;

if (alphaS[s[i]] ==0 )
alphaS[s[i]]=t[i];

if (alphaT[t[i]] ==0)
alphaT[t[i]]=s[i];
}
return true;
}

有一個奇怪的地方~~後面的== 0 好像不用檢查,但是為什麼不用啊 XD
因為不可能==零然後又通過 alpha != t[i] 也就是==嗎?!

沒有留言:

張貼留言