0
点赞
收藏
分享

微信扫一扫

【LeeCode】205. 同构字符串

天悦哥 2023-06-03 阅读 64


【题目描述】

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

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

https://leetcode.cn/problems/isomorphic-strings/

【示例】

【LeeCode】205. 同构字符串_java


【代码】leecode

【LeeCode】205. 同构字符串_java_02

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
    }
}

举报

相关推荐

0 条评论