看起來不難但是一直寫不出來 囧
寫出來之後又比人家慢很多?!
搞半天竟然是!!!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] 也就是==嗎?!
[20251108]更新
難道又是使用~覺得自己進步了的時候嗎?
bool isIsomorphic(char* s, char* t) {
int len = strlen(s);
char *map = calloc(128 , sizeof(char));
char *map2 = calloc(128 , sizeof(char));
for (int i=0; i<len; i++){
if (map[s[i]]==0 && map2[t[i]]==0)
{
map[s[i]]= t[i];
map2[t[i]] = s[i];
}
else if (map[s[i]] != t[i])
return false;
}
return true;
}
沒有留言:
張貼留言