欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LintCode:638.字符同构

程序员文章站 2022-07-16 11:53:07
...

题目:给定两个字符串 s 和 t ,确定它们是否是同构的。两个字符串是同构的如果 s 中的字符可以被替换得到 t。所有出现的字符必须用另一个字符代替,同时保留字符串的顺序。 没有两个字符可以映射到同一个字符,但一个字符可以映射到自己。

LintCode:638.字符同构

分析:采用hashmap来存放字符串s和字符串t之间的映射关系,同时在遍历s串的同时,利用set来存放字符串t,目的在于每当hashmap中不存在一个字符时,而想要把当前下标的s串和t串放入hashmap中时,判断此时set是否有当前下标的t串,如果存在的话,说明有多对一的映射关系存在,则直接返回false;而如果hashmap中存在当前下标的s串,则判断它的value值是否与当前下标的t串相等,如果不等的话返回false,因为此时不是一对一的映射关系。

public class Solution {
    /**
     * @param s: a string
     * @param t: a string
     * @return: true if the characters in s can be replaced to get t or false
     */
    public boolean isIsomorphic(String s, String t) {
        // write your code here
        if(s.length()<=0 ||t.length()<=0)   return false;
        HashMap<Character,Character> hashMap = new HashMap<>();
        Set<Character>  set=new HashSet<>();
        for(int i=0;i<s.length();i++){
            char chars=s.charAt(i);
            char chart=t.charAt(i);
            //键未出见过保存映射关系
            if(!hashMap.containsKey(chars)){
                if(set.contains(chart)){   //存在多对一映射
                    return false;
                }else{
                    hashMap.put(chars,chart);
                    set.add(chart);
                }
            }else{
                if(hashMap.get(chars)!=chart){ //不是一对一的映射关系
                    return false;
                }
            }
        }
        return true;
    }
}