foo abc false
abb cdd true
思路
- 使用a[256]记录当前字母出现的序号
- 当出现重复字母时,另一个字符串的相同位置也必须是对等的
- 以防万一做两遍过滤
代码
bool isIsomorphic(char * s, char * t){
int ls = strlen(s),lt=strlen(t);
int a[256];
memset(a,-1,sizeof(int)*256);
int i;
if(ls!=lt)
return false;
for(i=0;i<ls;i++){
if(a[s[i]]==-1){
a[s[i]]=i;
}
else{
if(t[i]!=t[a[s[i]]])
return false;
}
}
memset(a,-1,sizeof(int)*256);
for(i=0;i<ls;i++){
if(a[t[i]]==-1){
a[t[i]]=i;
}
else{
if(s[i]!=s[a[t[i]]])
return false;
}
}
return true;
}