[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
return true.
Given
return false.
Given
return true.
Note:
You may assume both s and t have the same length.
【解题思路】
返回true需要满足两个条件:
1、不能出现s中的一个字符对应到t中两个不同的字符
2、不能出现s中的两个不同字符对应到t中同一个字符
彼此之间映射关系不能错。
先贴个自己犯错的错误代码,关于memset错误用法。
memset(sTotTable, 1, sizeof(int)*256);这句话,我把sTotTable打印出来,发现16843009,全部数组打印出来还是16843009。如此有规律,搜了一下meset用法, memset是按字节赋值。这样我就突然明白了16843009意义了。然后我立马按照16进制打印改数组,果然输出结果和我预想一致是0x01010101。此处打点,下次碰到类似问题,多尝试几种打印方式。
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 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解