205.同构字符串
youzouzou opened this issue · comments
题号205:
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换最终变成 t ,则两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
例如,
给定 "egg", "add", 返回 true.
给定 "foo", "bar", 返回 false.
给定 "paper", "title", 返回 true.
注意:
你可以假设 s 和 t 具有相同的长度。
解题思路:
类似桶排序的思路,以第一个字符串的字符作为桶的序号,对应映射到第二个字符串的字符(映射值);
遍历字符串时,若遇到已初始化的字符,则比较映射值是否与第二个字符串的字符相等,不等则返回false;
若未初始化,则将第二个字符串的字符作为映射值赋给该桶;
最后还需要比较桶中的映射值是否有重复,若有重复也返回false。
代码实现:
class Solution {
public:
bool isIsomorphic(string s, string t) {
char a[128]={};
for(int i=0;i<s.length();i++){
if(a[s[i]] && a[s[i]]!=t[i])
return false;
a[s[i]]=t[i];
}
for(int i=0;i<128;i++){
for(int j=i+1;j<128;j++){
if(a[i] && a[j] && a[i]==a[j])
return false;
}
}
return true;
}
};