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
分析,题目要求判断一个字符串中是否可以有另一个字符串中得数字替换而来,如果直接尝试替换的话,其实实现比较麻烦,不如直接对两个字符串分解进行转换,看转换后的结果是否一致。
转换算法如下,依次用‘0’, ‘1‘...替换字符串出现的字符,如‘abc’替换为’012‘, ’abbc‘替换成’0112‘。所以需要设置一张转换表,记录转换后每个字符对应的替代字符。代码如下:
class Solution {
public:
string transferStr(string s){
char table[128] = {0};
char tmp = '0';
for (int i=0; i<s.length(); i++) {
char c = s.at(i);
if (table[c] == 0) {
table[c] = tmp++;
}
s[i] = table[c];
}
return s;
}
bool isIsomorphic(string s, string t) {
if (s.length() != t.length()) {
return false;
}
if (transferStr(s) == transferStr(t)) {
return true;
}
return false;
}
};

本文详细阐述了如何通过简单的算法判断两个字符串是否能够通过字符替换达到同构状态。通过实例分析,引入了转换算法,并提供了代码实现,使读者能够快速掌握同构字符串的判断方法。

223

被折叠的 条评论
为什么被折叠?



