[Java][Leetcode simple] 205. 同构字符串

法1: 单哈希表

  • 遍历s,如果sc不在map中,需要添加映射关系。(此时,要排除多对一的关系:例如:bacd,baba;此时b已经被b映射了,就不能再映射到d上 )
  • 如果sc在map中,此时说明已经添加过映射关系了,此时取出当时的映射关系,如果与tc不相等,说明本次的映射关系错误
java 复制代码
class Solution {
    public boolean isIsomorphic(String s, String t) {
         if(s.length() != t.length()) return false;
         int n = s.length();
         Map<Character,  Character> map = new HashMap<>();
         for(int i = 0;i< n ;i++){
              char sc = s.charAt(i);
              char tc = t.charAt(i);
               if(!map.containsKey(sc)){
                    if(map.containsValue(tc)) return false;
                    map.put(sc, tc);
               }else{
                   char tmp = map.get(sc);
                   if(tmp != tc) return false;
               }
         }
         return true;
    }
}

法2:官解:双数组字符映射

哈希表map.containsValue o(K) 还是有点耗时,采用两个数组分别记录映射关系。

java 复制代码
class Solution {
    public boolean isIsomorphic(String s, String t) {
        if(s.length() != t.length()) return false;
        int n = s.length();
        int[] mapS = new int[256]; 
        int[] mapT = new int[256]; 
        for(int i = 0;i<n ;i++){
            char c1 = s.charAt(i);
            char c2 = t.charAt(i);
            if(mapS[c1] != 0 &&  mapS[c1] != c2 ) return false;
            if(mapT[c2] != 0 &&  mapT[c2] != c1 ) return false;

            mapS[c1] = c2;
            mapT[c2] = c1;
        }
        return true;
    }
}
相关推荐
AC赳赳老秦1 分钟前
时间开销自动统计:OpenClaw 记录工作任务时长、分析时间分配、给出优化建议
java·大数据·开发语言·python·自动化·deepseek·openclaw
名侦探72226 分钟前
构建 Agent 的五大难点与解决方案
java·大数据·人工智能
Demons_kirit29 分钟前
图库原理(以阿里云OSS为案例)
java·阿里云·云计算
SimonKing32 分钟前
那个号称"对标 Spring"的国产框架 Solon,到底行不行?
java·后端·程序员
Lethehong34 分钟前
飞算Java:从需求梳理到风险闭环,搭建云盾企业信息安全与权限管理平台
java·开发语言
霸道流氓气质37 分钟前
SpringBoot中使用字典驱动的动态路由示例
java·spring boot·后端
旖-旎38 分钟前
《LeetCode 416 分割等和子集》
c++·算法·leetcode·动态规划·背包问题
Jasmine_llq1 小时前
《P15798 [GESP202603 五级] 有限不循环小数》
算法·有限小数判定数论定理·质因子约分检验·枚举生成合法数字·哈希集合去重·快速 io 优化
学计算机的计算基1 小时前
操作系统八股文:进程与线程全面梳理(附调度算法+IPC+锁机制)
java·算法