当前位置: 首页 > 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;
    }
}
http://www.dtcms.com/a/2735.html

相关文章:

  • 【论文阅读】基于卷积神经的端到端无监督变形图像配准
  • 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 获取过滤后的树结构
  • 微信小程序 onLoad(option) 方法
  • CSS3 网格布局
  • laravel框架的优缺点是什么?
  • CISA 彻底改变了恶意软件信息共享:网络安全的突破
  • Linux考试复习整理
  • linux系统编程之三
  • django系列之事务操作
  • Kali Linux 安装搭建 hadoop 平台 详细教程
  • 求职半年,十月成功拿到比亚迪offer,分享一波面经....
  • Mac 使用 scp 上传或下载文件/文件夹