`

Leetcode - Isomorphic Strings

 
阅读更多
[分析]
思路1:维护两个哈希表,char[] map, boolean[] used, 长度均为256,map[charS] = charT, 表示将字符charS 映射为charT, used[charT]==true 表示charT已经被某个字符映射过了。同步遍历字符串s & t,记两者当前的字符分别为charS, charT, 若charS是新字符,且charT没有被使用,则我们可将其同charT建立映射关系,否则说明有两个不同的字符试图映射到同一个字符上,不符合要求;若charS已被建立映射关系,则检查charT是否和charS的映射字符相等,不相等不符合题目要求的“All occurrences of a character must be replaced with another character ”。
思路2:参考https://leetcode.com/discuss/33854/my-6-lines-solution,又是一个怎巧妙了得~ 这个思路也是用两个哈希表,不同于思路1直接将s中的字符映射到t中字符,它是将s 和 t中的字符同时映射到下标上,因为若个字符若存在映射关系,则必然是出现在相同的下标位置,实现中由于初始值为0,建立映射时使用 i + 1,以区分未映射状态和映射到下标为0的状态。

public class Solution {
    // Method 2 https://leetcode.com/discuss/33854/my-6-lines-solution
    public boolean isIsomorphic(String s, String t) {
        int[] map1 = new int[256];
        int[] map2 = new int[256];
        for (int i = 0; i < s.length(); i++) {
            if (map1[s.charAt(i)] != map2[t.charAt(i)])
                return false;
            map1[s.charAt(i)] = i + 1;
            map2[t.charAt(i)] = i + 1;
        }
        return true;
    }
    // Method 1
    public boolean isIsomorphic1(String s, String t) {
        if (s == null || t == null) return false;
        char[] map = new char[256];
        boolean[] used = new boolean[256];
        for (int i = 0; i < s.length(); i++) {
            char charS = s.charAt(i);
            char charT = t.charAt(i);
            if (map[charS] == 0) {
                if (used[charT]) return false; // No two characters may map to the same character 
                map[charS] = charT;
                used[charT] = true;
            } else if (map[charS] != charT){
                return false; // All occurrences of a character must be replaced with another character 
            }
        }
        return true;
    }
}
分享到:
评论

相关推荐

    python-leetcode题解之205-Isomorphic-Strings.py

    python python_leetcode题解之205_Isomorphic_Strings.py

    leetcode209-LeetCode209_Isomorphic_Strings:映射字符串

    标题 "LeetCode209 - Isomorphic Strings" 涉及到的是一个计算机科学与编程相关的算法问题,主要探讨字符串的映射关系。在描述中,“映射字符串”这一概念指出我们要研究的是如何通过一种映射规则来比较两个字符串...

    发帖源码java-leetcode-javascript-solutions:javascript中的leetcode问题的解决方案,位于以下

    Strings-| | | 217.包含重复的-| | | 219.包含重复的II-| | | 242.有效字谜-| | | 268.缺少编号-| | | 344.反向字符串-| | | 345.一个字符串的反向元音-| | | 349.两个数组的交集-| | | 374.猜测数字更高或更低-| | ...

    LeetCode最全代码

    # [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...

    Leetcode 同构字符串.php

    LeetCode 205的题目是“同构字符串”(Isomorphic Strings),要求判断两个字符串是否是同构的。如果字符串s可以通过字符替换得到字符串t,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时...

    python-leetcode面试题解之第205题同构字符串-题解.zip

    本题解将深入探讨Python解冑LeetCode第205题——"同构字符串"(Isomorphic Strings)。 同构字符串是指两个字符串s和t,它们之间存在一个一对一的映射关系,即每个字符在s中都有一个特定的字符对应t中的另一个字符...

    2018年最新Google Onsite面经总结1

    从标题和描述中可以看到,本文主要关注于LeetCode原题的总结,涵盖了162个题目,包括Find Peak Element、Isomorphic Strings、Group Shifted Strings等,这些题目都是Google Onsite面经中的常见题目。 下面将对这些...

    Coding Interview In Java

    4 Isomorphic Strings 25 5 Word Ladder 27 6 Word Ladder II 29 7 Median of Two Sorted Arrays 33 8 Kth Largest Element in an Array 35 9 Wildcard Matching 37 10 Regular Expression Matching in Java 39 11 ...

    招银网络java科技笔试题-WaytoInterview:JVM和设计模式和算法的快速浏览

    IsomorphicStrings_lc205 lowestCommonAncestor_lc235 Netease 2018 - 2019 年度网易Android、Java岗算法题目汇总 最大兴趣值(MaxInterest) 数塔问题(BalancedTower) 丰收(Harvest) 牛牛找工作(FindJob) 数对

Global site tag (gtag.js) - Google Analytics