当前位置: 首页 > news >正文

面试算法32:有效的变位词

题目

给定两个字符串s和t,请判断它们是不是一组变位词。在一组变位词中,它们中的字符及每个字符出现的次数都相同,但字符的顺序不能相同。例如,"anagram"和"nagaram"就是一组变位词。

分析

如果只考虑英文字母,则用数组模拟哈希表先考虑字符串中只包含英文小写字母的情形。由于英文小写字母只有26个,因此可以用一个数组来模拟哈希表。

public class Test {
    public static void main(String[] args) {
        boolean anagram = isAnagram("anagram", "nagaram");
        System.out.println(anagram);
    }

    public static boolean isAnagram(String str1, String str2) {
        if (str1.length() != str2.length()) {
            return false;
        }

        int[] counts = new int[26];
        for (char ch : str1.toCharArray()) {
            counts[ch - 'a']++;
        }

        for (char ch : str2.toCharArray()) {
            if (counts[ch - 'a'] == 0) {
                return false;
            }

            counts[ch - 'a']--;
        }

        return true;
    }
}

哈希表方法:

public class Test {
    public static void main(String[] args) {
        boolean anagram = isAnagram("anagram", "nagaram");
        System.out.println(anagram);
    }

    public static boolean isAnagram(String str1, String str2) {
        if (str1.length() != str2.length()) {
            return false;
        }

        Map<Character, Integer> counts = new HashMap<>();
        for (char ch : str1.toCharArray()) {
            counts.put(ch, counts.getOrDefault(ch, 0) + 1);
        }

        for (char ch : str2.toCharArray()) {
            if (!counts.containsKey(ch) || counts.get(ch) == 0) {
                return false;
            }

            counts.put(ch, counts.get(ch) - 1);
        }

        return true;
    }
}

相关文章:

  • 【论文阅读】基于卷积神经的端到端无监督变形图像配准
  • SQLAlchemy学习-12.查询之 order_by 按desc 降序排序
  • 竞赛选题 深度学习YOLO安检管制物品识别与检测 - python opencv
  • STM32内部flash闪存的总结
  • 数字图像处理实验记录四(图像的空间域增强-平滑处理)
  • 云计算认证有哪些?认证考了有什么用?
  • 华为智选SF5,AITO问界的车怎么样
  • 使用Gitlab构建简单流水线CI/CD
  • 【数据结构】顺序表
  • 由Django-Session配置引发的反序列化安全问题
  • 留学教育咨询机构如何通过软文强势突围
  • langchain sql agent 案例
  • RUST持续学习 一点borrow问题的心得记录
  • GitHub-使用 Git工具 创建密钥id_rsa.pub
  • Redis 主从复制,哨兵,集群——(2)哨兵篇
  • 如何在Android项目中制作和使用三方包(jar文件)
  • Kylin麒麟操作系统(基于Linux)下的环境变量配置,重启生效
  • 【网络协议】聊聊拓扑网络结构与原理
  • 华为OD机考B卷 | 100分】阿里巴巴找黄金宝箱(JAVA题解——也许是全网最详)
  • el-tree 获取过滤后的树结构
  • 履新宿州市政府党组书记后,任东暗访五一假期安全生产工作
  • 美国证实加拿大及墨西哥汽车零部件免关税
  • 阿根廷发生5.8级地震
  • 《水饺皇后》领跑五一档票房,《哪吒2》上座率仍居第一
  • 魔都眼|石库门里看车展,五一来张园体验城市“漫时光”
  • 新华时评:防范安全事故须臾不可放松