同构字符串示例:
(1) s = “egg”, t = “add”
(2) s = “paper”, t = “title”
非同构字符串:
(1) s = “foo”, t = “bar”
(2) s = “fkk”, t = “kkr”
映射法:通过两个链表分别对字符串s和t进行维护,即字符串中每一个字符都采用第一次出现该字符时的位置进行替代:
例如:
addccjjk —> 12244668
bccggkko —> 12244668
abcd —> 1234
asdadf —> 123136
通过这种方法即可实现同构字符串获得相同数字串,通过判断数字串是否相等即可判断是否为同构字符串。
bool isIsomorphic(string s, string t)
{
vector<int> m_vecS;
vector<int> m_vecT;
if (s.size() != t.size()) return false;
for (int i = 0; i < s.size(); i++)
{
int m_iTig = s.find(s[i]);
m_vecS.push_back(m_iTig);
m_iTig = t.find(t[i]);
m_vecT.push_back(m_iTig);
}
for (int i = 0; i < m_vecT.size(); i++)
{
if (m_vecT[i] != m_vecS[i]) return false;
}
return true;
}
另外一位大佬的上述方法简化版:
bool isIsomorphic(string s, string t) {
for(int i=0;i<s.size();i++){
if(s.find(s[i])!=t.find(t[i]))
return false;
}
return true;
}