原题:
Given two strings s and t, determine if they are isomorphic.
Two strings are isomorphic if the characters in s can be replaced to get t.
All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.
For example,
Given "egg"
, "add"
, return true.
Given "foo"
, "bar"
, return false.
Given "paper"
, "title"
, return true.
Note:
You may assume both s and t have the same length.
代码如下:
bool isIsomorphic(char* s, char* t) {
int slen=strlen(s);
int tlen=strlen(t);
int* sf;
int* tf;
sf=(int*)malloc(sizeof(int)*slen);
tf=(int*)malloc(sizeof(int)*tlen);
void setFlags(char *s,int* sf);
setFlags(s,sf);
setFlags(t,tf);
for(int n=0;n<slen;n++)
{
if(*(sf+n)!=*(tf+n))
return false;
}
return true;
}
void setFlags(char *s,int* sf)
{
int tag=0;
int slen=strlen(s);
for(int n=0;n<slen;n++)
{
int flag=0;
int m;
for(m=0;m<n;m++)
{
if(*(s+m)==*(s+n))
{
flag=1;
break;
}
}
if(flag==1)
{
*(sf+n)=*(sf+m);
}
else
{
*(sf+n)=tag;
tag++;
}
}
}
思路嘛,其实做一个特征数组就好了,随便用最简单的数字比较简单,而且比符号的使用空间更大一点。