力扣面试150题-同构字符串和单词规律

发布于:2025-04-17 ⋅ 阅读:(61) ⋅ 点赞:(0)

Day 23

题目描述

在这里插入图片描述

思路

见代码

class Solution {
    public boolean isIsomorphic(String s, String t) {
        if(s.length()!=t.length()){//如果两个字符串长度不同 直接不可能同构
            return false;
        }
        HashMap<Character,Character>map=new HashMap<>();//存放s到t的映射
        HashMap<Character,Character>map1=new HashMap<>();//存在t到s的映射
        for(int i=0;i<s.length();i++){
            if(map.containsKey(s.charAt(i))){//如果s的字符存在对t字符的映射
                if(map.get(s.charAt(i))!=t.charAt(i)){
                //不等说明一个s[i]字符对应的不止一个t的字符
                        return false;
                }
            }
            else{
               if(map1.containsKey(t.charAt(i))){
               //防止出现aabc和bbaa的情况
                return false;
               }
               else{
                map.put(s.charAt(i),t.charAt(i));
                map1.put(t.charAt(i),s.charAt(i));
               }
            }
        }
        return true;
    }
}

题目描述

在这里插入图片描述

思路

做法如下:

  1. 首先需要将s按照" "分离成字符串数组
  2. 类似于上题的做法(见代码)
class Solution {
    public boolean wordPattern(String pattern, String s) {
          String[] split = s.split(" ");//根据“ ”分离为字符串数组
        if(split.length!=pattern.length()){//剩下的类似于上题目 s和pattern
            return false;
        }
        HashMap<Character, String> map = new HashMap<>();
        HashMap<String,Character> map1 = new HashMap<>();
        for(int i=0;i<pattern.length();i++ ){
            if(map.containsKey(pattern.charAt(i))){
                if(!map.get(pattern.charAt(i)).equals(split[i])){
                    return false;
                }
            }
            else{
                if(map1.containsKey(split[i])){
                    return false;
                }
                map.put(pattern.charAt(i),split[i]);
                map1.put(split[i],pattern.charAt(i));
            }
        }
        return true;
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到