leetcode.字符串.205同构字符串-Java
1. 具体题目
给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1: 输入: s = "egg", t = "add" 输出: true
示例 2: 输入: s = "foo", t = "bar" 输出: false
示例 3: 输入: s = "paper", t = "title" 输出: true
2. 思路分析
利用哈希表的映射关系,将两个字符串中各字符的对应关系存入表中,之后查找这个表做判断。
3. 代码
1 public boolean isIsomorphic(String s, String t) { 2 //可对比 242.有效的字母异位词 3 if(s.length() != t.length()) return false; 4 HashMap<Character, Character> mapping = new HashMap<>(); 5 for(int i = 0; i < s.length(); i++){ 6 if(mapping.containsKey(s.charAt(i))){ 7 if(mapping.get(s.charAt(i)) != t.charAt(i)) return false; 8 }else{ 9 if(mapping.containsValue(t.charAt(i))) return false; 10 mapping.put(s.charAt(i), t.charAt(i)); 11 } 12 } 13 return true; 14 }
4. 思路优化
不用构建各字符一一对应的关系,只要判断对应字符出现的位置相同即可,也就是两个字符串中相同位置的字符,它们在各自字符串中每次出现的位置都应相同。为了方便,每次比较两字符首次出现的位置。
5. 代码优化
1 //参考别人答案,利用String类方法 indexOf(char c),返回指定字符在字符串中第一次出现的位置 2 public boolean isIsomorphic(String s, String t) { 3 char[] ch1 = s.toCharArray(); 4 char[] ch2 = t.toCharArray(); 5 int len = s.length(); 6 for (int i = 0; i < len; i++) { 7 if(s.indexOf(ch1[i]) != t.indexOf(ch2[i])){ 8 return false; 9 } 10 } 11 return true; 12 }

浙公网安备 33010602011771号