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

力扣打卡:有效的字母异同位

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

说明:
你可以假设字符串只包含小写字母。

解题思路

方法一:集合存储(不推荐)

自己写的菜菜的方法,因为有较多集合移除操作,所以执行时间较慢

  • 首先判断两个字符串长度是否相等,不相等则直接返回 false
  • 若不相等,先遍历存储s里的字符
  • 再遍历t里的字符,把集合里相同的字符移除掉
  • 若最终集合的大小为0,则二者为字母异位词
    (因为这里对应集合的操作,都是在尾部添加,删除操作多,而且需要根据值删除元素,所以选用LinkedList)
public static boolean isAnagram(String s, String t) {
 int sLen = s.length();
    int tLen = t.length();
    if (sLen != tLen) {
        return false;
    }
    List list = new LinkedList<Character>();
    for(int i = 0; i < sLen; i++) {
        list.add(s.charAt(i));
    }
    for(int i = 0; i < tLen; i++) {
        char c = t.charAt(i);
        if (list.contains(c)) {
            // 获取第一个值为c元素的下标,并根据下标移出此元素
            list.remove(list.indexOf(c));
        }
    }
    if (list.size() == 0) {
        return true;
    } else {
        return false;
    }
}

方法二:哈希表映射

  • 首先判断两个字符串长度是否相等,不相等则直接返回 false
  • 若相等,则初始化 26 个字母哈希表,遍历字符串 st
  • s负责在对应位置增加,t负责在对应位置减少
  • 如果哈希表的值都为 0,则二者是字母异位词
public static boolean isAnagram(String s, String t) {
   int sLen = s.length();
     int tLen = t.length();
     if (sLen != tLen) {
         return false;
     }
     int[] alpha = new int[26];
     for(int i = 0; i < sLen; i++) {
         alpha[s.charAt(i) - 'a'] ++;
         alpha[t.charAt(i) - 'a'] --;
     }
     for(int i = 0; i < alpha.length; i++) {
         if(alpha[i] != 0) {
             return false;
         }
     }
     return true;
 }

相关文章:

  • Hibernate 3.2 SQL函数返回类型从Integer变为Long
  • 浅谈vue中index.html、main.js、App.vue、index.js之前的关系以及加载过程
  • 忠厚开发者与“厚道”甲方II(超级Demo)——CSDN外包实践(38)
  • eladmin前端 学习笔记
  • 外包频道服务能力共建,项目顾问CRM管理——CSDN外包实践(39)
  • js中map与foreach的区别
  • em与rem的区别与使用
  • AI编辑器设想
  • export default 与 export 区别
  • 启动用户实例的进程时出错(Sql Server Exoress)
  • java setter 的链式调用
  • [需求]需求分析能力之二:引入领域模型
  • uniapp如何动态绑定事件
  • 北京.NET俱乐部第十次活动-“使用VSTS优化软件开发生命周期”
  • VScode+ESlint 自动格式化代码(2021)
  • AWS实战 - 利用IAM对S3做访问控制
  • Java 最常见的 200+ 面试题:面试必备
  • Java小白进阶笔记(3)-初级面向对象
  • java中的hashCode
  • nodejs实现webservice问题总结
  • October CMS - 快速入门 9 Images And Galleries
  • PHP那些事儿
  • React Native移动开发实战-3-实现页面间的数据传递
  • TypeScript迭代器
  • webgl (原生)基础入门指南【一】
  • 翻译--Thinking in React
  • 构建二叉树进行数值数组的去重及优化
  • 码农张的Bug人生 - 见面之礼
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 算法-插入排序
  • 推荐一个React的管理后台框架
  • 1.Ext JS 建立web开发工程
  • # 计算机视觉入门
  • #include
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (学习日记)2024.01.09
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ***检测工具之RKHunter AIDE
  • .describe() python_Python-Win32com-Excel