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     }

 

posted @ 2019-11-13 14:34  les111ley  阅读(231)  评论(0)    收藏  举报