您的位置:首页 > 其它

leetcode——Isomorphic Strings

2016-07-10 21:54 369 查看
题目:

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.

方法一:

为两个字符串建立hash表,hash[ch]表示ch上一次出现的位置,比较两个字符串对应的字符上次出现的位置是否一样

class Solution {
public:
bool isIsomorphic(string s, string t) {
if (s.length() != t.length())
{
return false;
}
int last_appear_s[256], last_appear_t[256];
memset(last_appear_s, -1, 256 * sizeof(int));
memset(last_appear_t, -1, 256 * sizeof(int));
bool is_ok = true;
int length = s.length();
//每次比较当前字符上次出现的位置
for (int i = 0; i < length; ++i)
{
if (last_appear_s[s[i]] != last_appear_t[t[i]])
{
is_ok = false;
break;
}
last_appear_s[s[i]] = i;
last_appear_t[t[i]] = i;
}

return is_ok;

}
};


方法二:

遍历字符串,建立起两个字符串字符的对应关系,这种对应关系可以用整数s[i] * 256 + t[i]唯一表示,后面遍历的时候比较映射值有没有变化即可。

class Solution {
public:
bool isIsomorphic(string s, string t) {
if (s.length() != t.length())
{
return false;
}
int diff1[256], diff2[256];
memset(diff1, -1, 256 * sizeof(int));//初始化为相同的值,保证第一次比较的时候相等
memset(diff2, -1, 256 * sizeof(int));
bool is_ok = true;
int length = s.length();
//每次比较当前字符上次出现的位置
for (int i = 0; i < length; ++i)
{
if (diff2[t[i]] != diff1[s[i]])
{
is_ok = false;
break;
}

diff2[t[i]] = diff1[s[i]] = s[i] << 8 + t[i];
}

return is_ok;

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