20201227[java]同构字符串

 

给定两个字符串 s 和 t,判断它们是否是同构的。

如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例 1:

输入: s = "egg", t = "add"
输出: true
示例 2:

输入: s = "foo", t = "bar"
输出: false
示例 3:

输入: s = "paper", t = "title"
输出: true
说明:
你可以假设 s 和 t 具有相同的长度。

通过次数76,325提交次数155,254

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/isomorphic-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

class Solution {
public boolean isIsomorphic(String s, String t) {
boolean flag = false;
/*比较字符串是否相同
s字符串不变
用s字符串中的字符依次替代t中的字符串
替代依次比较依次,看到最后都一直相同则是同够够的
*/
StringBuffer sbs = new StringBuffer();
StringBuffer sbt = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
// 遍历第一个字符串,比较每一个字符
char chs = s.charAt(i);
char cht = t.charAt(i);
boolean sexists = sbs.toString().contains(String.valueOf(chs));
boolean texists = sbt.toString().contains(String.valueOf(cht));

// s中当前字符第一次出现 且 t中当前字符也是第一次出现,
// 需要记录字符并比较出现位置是否对应
if (!sexists && !texists) {
sbs.append(chs);
sbt.append(cht);

// s中当前字符不是第一次出现 且 t中当前字符也是第一次出现,说明字符不对应,返回false
} else if (sexists && !texists) {
return false;

// s中当前字符是第一次出现 且 t中当前字符不是第一次出现,说明字符不对应,返回false
} else if (!sexists && texists) {
return false;

// s中当前字符不是第一次出现 且 t中当前字符也不是第一次出现,说明匹配过
// 直接比较下个字符
} else if (sexists && texists) {
continue;
}

// s中字符出现的位置,t中对应的位置字符要相同
for (int j = i + 1; j < s.length(); j++) {
if (s.charAt(j) == chs && t.charAt(j) != cht) {
return false;
}
}
}
return true;
}
}

 

posted @ 2020-12-27 22:50  bufuzhou  阅读(124)  评论(0编辑  收藏  举报