205. 同构字符串(Java)

205. 同构字符串(与290类似,290是判断字符串规律是否相同)

290:https://editor.csdn.net/md/?articleId=111302360
给定两个字符串 s 和 t,判断它们是否是同构的。

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

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

在这里插入图片描述
思路:hashmap的应用
要满足两个条件:
1.相同的字母要替换成相同的
2.不同的字母被替换成不同的
每个字符第一次出现时作为键,替换他的字符作为值

class Solution {
    public boolean isIsomorphic(String s, String t) {
	//hashMap的应用
	HashMap<Character,Character> map=new HashMap<>();
	if (s.length()!=t.length())
		return false;
	int len=s.length();
	for(int i=0;i<len;i++) {
		if (!map.containsKey(s.charAt(i)) ) {
			if(map.containsValue(t.charAt(i)))
				return false;
			map.put(s.charAt(i), t.charAt(i));
		}
			
		else if(map.get(s.charAt(i))!=t.charAt(i))
			   return false;
		   
	}
	return true;
        
    }

}

在这里插入图片描述

官方解法:
双映射
在这里插入图片描述

class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<Character, Character> s2t = new HashMap<Character, Character>();
        Map<Character, Character> t2s = new HashMap<Character, Character>();
        int len = s.length();
        for (int i = 0; i < len; ++i) {
            char x = s.charAt(i), y = t.charAt(i);
            if ((s2t.containsKey(x) && s2t.get(x) != y) || (t2s.containsKey(y) && t2s.get(y) != x)) {
                return false;
            }
            s2t.put(x, y);
            //HashMap.put(key,value):如果插入的 key 对应的 value 已经存在,则执行 value 替换操作,返回旧的 value 值,如果不存在则执行插入,返回 null。
            t2s.put(y, x);
        }
        return true;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值