• LeetCode205----同构字符串


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

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

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

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

    思路:

    我们拿"paperp""titlel"举例:

    (1)首先我们会定义一个哈希表(Map)来完成一种一一对应的关系,第一次进来时我们把p和t对应

             p <==> t

    (2)这时我们继续判断下一个字符a和i,我们在哈希表中并没有找到以a为key的项,并且t作为value也并没有出现在其他项中,所以我们添加a t键值对

             p <==> t  a <==> i

    (3)继续,我们又找到了p字符和t字符,我们可以在哈希表中找到以p为key的项,并且value是t,而我们此时遍历到的确实是t,代表匹配上了,继续下一个

    (4)拿到e和l字符,哈希表没有以e为key的项,并且l也没有作为value出现在其他项内,所以添加键值对

             p <==> t  a <==> i e <==> l

    (5)继续拿到r和e字符串,哈希表内没有找到以r为key的项,并且e没有作为value出现在其他项内,所以添加键值对

             p <==> t  a <==> i e <==> l  r <==> e

    (6)继续拿到p和l,这时要注意,我们可以在哈希表内找到以p为key的项,并且该项的value不是l !!所以这时没有匹配上,整段垮掉,返回false

    代码如下:

    public class LeetCode205 {
    
    	public static boolean isIsomorphic(String s, String t) {
    		if (s.length() != t.length()) {
    			return false;
    		}
    		char[] ss = s.toCharArray();
    		char[] tt = t.toCharArray();
    		Map<Character, Character> map = new HashMap<>();
    		for (int sIndex = 0, tIndex = 0; tIndex < tt.length; tIndex++, sIndex++) {
    			if (!map.containsKey(ss[sIndex])) {
    				if (!map.containsValue(tt[tIndex])) {
    					map.put(ss[sIndex], tt[tIndex]);
    				} else {
    					return false;
    				}
    			}
    			if (!map.get(ss[sIndex]).equals(tt[tIndex])) {
    				return false;
    			}
    			continue;
    		}
    		return true;
    	}
    }
    

      

  • 相关阅读:
    VMware 8安装Mac OS X 10.7 Lion正式版
    linq to sql sum
    拍照,去相册剪切图片
    Binding for WPF Styles
    JDK1.8简单配置环境变量两步曲
    hibernate系列之四
    idea中使用逆向工程三部曲
    hibernate系列之一
    hibernate系列之二
    《JSON笔记之二》封装JSONUtil
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/9398880.html
Copyright © 2020-2023  润新知