您的位置:首页 > 其它

Leetcode solution 02:205 Isomorphic Strings

2015-05-23 11:33 239 查看

Isomorphic Strings

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.

show tags: hash table

//C++
class Solution {
public:
bool isIsomorphic(string s, string t) {
};


题目的意思就是给你2个string,如果他们都是 ABB 类型 , ABBCDD 类型……,就返回true 否则返回 false

也就是说相同位置的字母要一样

刚开始我想的是替换

比如 paper 和 title

第一遍拿到 p 和 t

然后循环一次 paper 将其中所有的p 替换成t

第二遍拿到 a 和 i

循环 paper 将其中所有的a替换成i

第二个想法是 26个字母,就用 a[26],全部初始化为0

第一个字母就在 a[0]+1, 后面相同字母再+1,不同存入a[1],a[2]

最后比较2个数组

感觉第一个比较好写,就写了第一个

class Solution {
public:
bool isIsomorphic(string s, string t) {
int length = s.length();
char c1, c2;
for (int i = 0; i < length; i++)
{
c1 = s[i];
c2 = t[i];
for (int j = 0; j < length; j++)
{
if (s[j]==c1)
{
s[j] = c2;
}
}
}
if (s == t)
return true;
else
return false;
}
};


结果没通过,它上面的测试数据是很长很长的一串各种字符都有的东西

看了下提示,是Hash Table,这才想到之前的第二种想法和hash table 挺像的

而且还想的比 Hash 麻烦,最后用Hash 表的方法写了另外一个方法通过OJ

class Solution {
public:
bool isIsomorphic(string s, string t) {
int  a[256] = { 0 }, b[256] = {0};
for (int i = 0; i < s.length(); i++)
{
if (a[s[i]] > 0 || b[t[i]] > 0)
{
if (a[s[i]] = b[t[i]])
continue;
else
return false;
}
else{
a[s[i]] = i + 1;
b[t[i]] = i + 1;
}
}
return true;
}
};


初始化 2个数组 全部存0

第一次遇到字母,会存入相应的位置,并且存入值为i+1,保证各个下标的值均不同,之后再次遇到相同(也就是 a[s[i]] > 0 || b[t[i]] > 0 )则会比较其位置的值是否相等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  strings solution leetcode