您的位置:首页 > 其它

[LeetCode-205] Isomorphic Strings(同构字符串)

2015-11-16 22:32 344 查看
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.

【解题思路】

返回true需要满足两个条件:

1、不能出现s中的一个字符对应到t中两个不同的字符

2、不能出现s中的两个不同字符对应到t中同一个字符

彼此之间映射关系不能错。

先贴个自己犯错的错误代码,关于memset错误用法。

//Isomorphic Strings
//Written by ZP1015
//2015.11.16

bool isIsomorphic(char* s, char* t)
{
if(!s||!t)
return false;

int slen = strlen(s);
int tlen = strlen(t);
int i = 0;

if(slen!=tlen)
return false;

int *sTotTable = (int *)malloc(sizeof(int)*256);
int *tTosTable = (int *)malloc(sizeof(int)*256);

memset(sTotTable, -1, sizeof(int)*256);	//存在严重问题
memset(tTosTable, -1, sizeof(int)*256);

for(i=0;i<slen;i++) {
if(sTotTable[s[i]] == -1) {
if(tTosTable[t[i]] == -1) {
sTotTable[s[i]] = t[i]; /*s->t 转换关系*/
tTosTable[t[i]] = s[i]; /*t->s 转换关系*/
} else {
goto NotIsomorphic;
}
} else {
if(sTotTable[s[i]]!= t[i])
goto NotIsomorphic;
}
}

free(sTotTable);
free(tTosTable);

return true;
NotIsomorphic:
free(sTotTable);
free(tTosTable);

return false;
}

memset(sTotTable, 1, sizeof(int)*256);这句话,我把sTotTable打印出来,发现16843009,全部数组打印出来还是16843009。如此有规律,搜了一下meset用法, memset是按字节赋值。这样我就突然明白了16843009意义了。然后我立马按照16进制打印改数组,果然输出结果和我预想一致是0x01010101。此处打点,下次碰到类似问题,多尝试几种打印方式。

<pre name="code" class="cpp">//Isomorphic Strings
//Written by ZP1015
//2015.11.16

bool isIsomorphic(char* s, char* t)
{
if(!s||!t)
return false;

int slen = strlen(s);
int tlen = strlen(t);
int i = 0;

if(slen!=tlen)
return false;

int sTotTable[256];
int tTosTable[256];

for(i=0;i<256;i++) {
sTotTable[i] = -1;
tTosTable[i] = -1;
}

for(i=0;i<slen;i++) {
if(sTotTable[s[i]] == -1) {
if(tTosTable[t[i]] == -1) {
sTotTable[s[i]] = t[i]; /*s->t 转换关系*/
tTosTable[t[i]] = s[i]; /*t->s 转换关系*/
} else {
return false;
}
} else {
if(sTotTable[s[i]]!= t[i])
return false;
}
}

return true;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode