首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >容器的妙用: 判断两个字符串同构

容器的妙用: 判断两个字符串同构

作者头像
一个架构师
发布2022-06-20 20:06:27
发布2022-06-20 20:06:27
4790
举报

给定两个字符串, 判断两个字符串的结构是否相同, 比如说abb与cdd就是同构的, ab与aa 就不是同构的.

同构也就意味着, 两个字符串中的每一位是能够一一对应, 存在映射关系的.

以abb与cdd为例

代码语言:javascript
复制
a -> c
b -> d

需要选择一个合适的容器去存储映射关系, 通常会选用HashMap.

还需要注意的是ab与aa 中b映射a的情况,

a已经映射到a了,

b再次映射a时, 就已经打乱映射关系了, 不能算同构了.

所以, 还需要另外一个容器, 记录已经映射过的字符, 通常会选用HashSet;

代码如下:

代码语言:javascript
复制
public static boolean isIsomorphic(String s, String t) {
  Map<Character, Character> map = new HashMap();
        Set<Character> set = new HashSet<>();
        for (int i = 0; i < s.length(); i++) {
            char c1 = s.charAt(i), c2 = t.charAt(i);
            Character ch = map.get(c1);
            if (ch == null) {
                if(!set.contains(c2)){
                    map.put(c1, c2);
                    set.add(c2);
                } else {
                    return false;
                }
            } else if (ch.charValue() != c2) {
                return false;
            }
        }
        return true;
    }

这是个很简单的算法, 今天拿出来分享是因为它代表着一种解题思路:

在解决一些需要记录映射关系或者遍历记录时, 可以选择其他O(1)复杂度的容器, 辅助解决, 达到空间换时间的目的.

这些O(1)复杂度的容器通常是HashMap和HashSet.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从码农的全世界路过 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档