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.
题目大意是:判断两个字符串之间的生成格式是否一样,其中规则如下:
1、字符之间只能构成一一映射关系,即:同一字符只能映射到一个字符且同一字符只能被一个字符映射
2、字符可以映射到本身
3、保证s和t的长度一致
思路:
1、建立一个map表,表示s中字符映射到t中字符用一个长度为128的数组表示。
2、建立一个记录表,记录t中字符是否已经被构成映射,大小同样为128。
3、根据两个表对t中字符进行遍历:对t中没有映射过的字符新建映射关系并记录,映射过的字符进行判断是否正确映射。
附上代码:
class Solution {
public:
bool isIsomorphic(string s, string t) {
int n = s.size();
if ( n == 0 )
return true;
vector <char> chtoch ( 128 , ' ' );
vector <bool> visit ( 128 , false );
for ( int i = 0 ; i < n ; i ++ )
{
if ( visit[t[i]] )
{
if ( chtoch[s[i]] != t[i] )
return false ;
}
else
{
if ( chtoch[s[i]] != ' ' )
return false ;
chtoch[s[i]] = t[i] ;
visit[t[i]] = true ;
}
}
return true ;
}
};