【题目描述】
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
https://leetcode.cn/problems/isomorphic-strings/
【示例】
【代码】leecode
package com.company;
import java.util.*;
// 2023-06-03
class Solution {
public boolean isIsomorphic(String s, String t) {
int n = s.length();
HashMap<Character, Character> map = new HashMap<>();
HashMap<Character, Character> map2 = new HashMap<>();
int len = s.length();
for (int i = 0; i < len; i++){
char c1 = s.charAt(i);
char c2 = t.charAt(i);
if ((map.containsKey(c1) && map.get(c1) != c2) && (map2.containsKey(c2) && map2.get(c2) != c1)){
return false;
}
map.put(c1, c2);
map2.put(c2, c1);
}
return true;
}
}
public class Test {
public static void main(String[] args) {
new Solution().isIsomorphic("egg", "add"); // 输出: true
new Solution().isIsomorphic("foo", "bar"); // 输出: false
new Solution().isIsomorphic("badc", "baba"); // 输出: false
}
}
【代码】最简单
判断下标是否一致
class Solution {
public boolean isIsomorphic(String s, String t) {
for(int i = 0; i < s.length(); i++){
if(s.indexOf(s.charAt(i)) != t.indexOf(t.charAt(i))){
return false;
}
}
return true;
}
}
【代码】
通过率 33/40 这里的问题应该是只做了单项的映射
package com.company;
import java.util.*;
// 2023-06-03
class Solution {
public boolean isIsomorphicHelper(String s, String t) {
int n = s.length();
HashMap<Character, Character> map = new HashMap<>();
for (int i = 0; i < n; i++) {
char c1 = s.charAt(i);
char c2 = s.charAt(i);
if (map.containsKey(c1)) {
if (map.get(c1) != c2) {
return false;
}
} else {
map.put(c1, c2);
}
}
return true;
}
}
public class Test {
public static void main(String[] args) {
// new Solution().isIsomorphic("egg", "add"); // 输出: true
// new Solution().isIsomorphic("foo", "bar"); // 输出: false
new Solution().isIsomorphic("badc", "baba"); // 输出: false
}
}
标签:同构,isIsomorphic,205,String,Solution,LeeCode,c2,new,c1
From: https://blog.51cto.com/u_13682316/6407934