205. 同构字符串 - 力扣(LeetCode) (leetcode-cn.com)
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
方法1:用2个map维护2个字符串中字符的映射关系
class Solution {
public boolean isIsomorphic(String s, String t) {
int len1 = s.length();
int len2 = t.length();
if(len1 != len2){
return false;
}
Map<Character,Character> map1 = new HashMap<>();
Map<Character,Character> map2 = new HashMap<>();
for(int i=0;i<len1;i++){
char ch1 = s.charAt(i);
char ch2 = t.charAt(i);
if((map1.containsKey(ch1) && map1.get(ch1) != ch2) || map2.containsKey(ch2) && map2.get(ch2) != ch1){
return false;
}else{
map1.put(ch1,ch2);
map2.put(ch2,ch1);
}
}
return true;
}
}
方法2:直接通过索引判断
-
public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
class Solution {
public boolean isIsomorphic(String s, String t) {
int len1 = s.length();
int len2 = t.length();
if(len1 != len2){
return false;
}
for(int i=0;i<len1;i++){
if(s.indexOf(s.charAt(i)) != t.indexOf(t.charAt(i))){
return false;
}
}
return true;
}
}