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.
给定两个字符串s和t,判断它们是否同形
同形是指所有的字符都可以在不改变顺序的情况下替换成其他的字符,且不同的字符不能映射到相同的字符,但一个字符可以映射到它本身。
例如:
给定"egg"
, "add"
, 返回真
给定"foo"
, "bar"
, 返回假
给定"paper"
, "title"
, 返回真
利用map即可建立映射,但需要考虑的是如何判断两个不同的key是否映射到同一value上。这里我采用了一个很蠢的办法,就是再建立一个t对于s的映射。。。为了区别,s->t用的是字符串的ASCII码,而t->s用的是字符编号(如a为1,b为2。。。以此类推)
class Solution {
public:
bool isIsomorphic(string s, string t) {
map<int,char> mapl;
for(int i=0;i<s.length();i++)
{
if(mapl.count(s[i])&&t[i]!=mapl[s[i]]||mapl.count(t[i]-'a')&&s[i]!=mapl[t[i]-'a']) return false;
else
{
mapl[s[i]]=t[i];
mapl[t[i]-'a']=s[i];
}
}
return true;
}
};
今天其实没有写什么代码,一是因为下午有实验而且晚上有课,二是因为实在是不怎么爽。。。哎,听天由命吧。