LeetCode 205

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

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

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

示例 1:

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

示例 2:

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

示例 3:

输入: s = "paper", t = "title"
输出: true

说明:
你可以假设 和 具有相同的长度。

错误样例(TLE) 

class Solution {
    public boolean isIsomorphic(String s, String t) {
        int cnt = 0;

        for(int i = 0;i < s.length(); ++i) {
            //if(s.charAt(i) != '*' && s.charAt(i) != '/') {
                char c = (char)(cnt%10);
            System.out.println(c);
                //if(cnt %2 == 0) c = '/';
                s = s.replace(s.charAt(i),c);
                cnt++;
           // }
        }
        cnt = 0;
        for(int i = 0;i < t.length(); ++i) {
            //if(t.charAt(i) != '*' && t.charAt(i) != '/') {
                char c = (char)(cnt%10);
                //if(cnt %2 == 0) c = '/';
                t = t.replace(t.charAt(i),c);
                cnt++;
           // }
        }
//        System.out.println(s);
//        System.out.println(t);

        if(s.equals(t)) return true;
        else return false;
    }
}

正解:建一个map保存映射关系, 同时用一个set保持被映射的char, 保证同一个char 不会被映射两次。

public boolean isIsomorphic2(String s, String t) {
        if (s == null || t == null)
            return false;
        if (s.length() != t.length())
            return false;
        Map<Character, Character> map = new HashMap<Character, Character>();
        Set<Character> set = new HashSet<Character>();
        char c1, c2;
        for (int i = 0; i < s.length(); i++) {
            c1 = s.charAt(i);
            c2 = t.charAt(i);

            if (map.containsKey(c1)) {
                if (map.get(c1) != c2)
                    return false;
            } else {
                if (set.contains(c2)) 
                    return false;
                else {
                    map.put(c1, c2);
                    set.add(c2);
                }
            }
        }
        return true;
    }

public boolean isIsomorphic2(String s, String t) { if (s ==null|| t ==null) returnfalse; if (s.length() != t.length()) returnfalse; Map<Character, Character>map=new HashMap<Character, Character>(); Set<Character>set=new HashSet<Character>(); char c1, c2; for (int i =0; i < s.length(); i++) { c1 = s.charAt(i); c2 = t.charAt(i); if (map.containsKey(c1)) { if (map.get(c1) != c2) returnfalse; } else { if (set.contains(c2)) returnfalse; else { map.put(c1, c2); set.add(c2); } } } returntrue; }

猜你喜欢

转载自www.cnblogs.com/wangtinglou/p/9430869.html
今日推荐