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

【LeetCode-经典面试150题-day10】

目录

242.有效的字母异位词

 49.字母异位词分组

 202.快乐数

 219.存在重复元素Ⅱ

 383.赎金信

 205.同构字符串

290.单词规律 


 

242.有效的字母异位词

题意:

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词

【输入样例】

s="anagram",t="nagaram"

【输出样例】true

解题思路:

比较简单,定义一个数组来记录两个字符串中的字母出现次数

数组alphaNum初始化为0,一个字符串负责对其++,一个对齐--

如果是字母异位词,最后alphaNum的值肯定还是全0

class Solution {public boolean isAnagram(String s, String t) {//s和t都是小写字母,每个字符出现次数相同,当两个字符长度不一样时也不行if(s.length() != t.length()){return false;}int[] alphaNum = new int[26];for(int i=0;i<s.length();++i){++alphaNum[s.charAt(i) - 'a'];}for(int i = 0;i<t.length();++i){--alphaNum[t.charAt(i) - 'a'];if(alphaNum[t.charAt(i) - 'a'] < 0){return false;}}return true;}
}

时间: 击败了82.24%

内存: 击败了71.71%

 49.字母异位词分组

题意:

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

【输入样例】

strs=["eat","tea","tan","ate","nat","bat"]

【输出样例】[["eat","tea","ate"],["tan","nat"],["bat"]]

解题思路:

排序+哈希
拿到一个字符串str,对其进行排序:如“eat"排序完是”aet“,之后将aet作为key存到map中
使用map.getOrDefault(key,new Array<>());
如果map中存在此key,会将key对应的value(本题是list)返回了,如果没有此key,证明是第一次遇到,new一个list

class Solution {public List<List<String>> groupAnagrams(String[] strs) {//方法一:排序+哈希Map<String,List<String>> map = new HashMap<String,List<String>>();for(String str: strs){char[] array = str.toCharArray();Arrays.sort(array);String key = new String(array);List<String> list = map.getOrDefault(key,new ArrayList<String>());list.add(str);map.put(key,list);}return new ArrayList<List<String>>(map.values());//把map转成对应格式}
}

时间: 击败了99.24%

内存: 击败了40.02%

class Solution {public List<List<String>> groupAnagrams(String[] strs) {//方法二:计数+哈希/**拿到一个字符串str,按上一题的思路统计出现的次数和字母作为key:如eat为a1e1t1用计数统计来替换掉数组排序之后是一样的操作使用map.getOrDefault(key,new Array<>());如果map中存在此key,会将key对应的value(本题是list)返回了,如果没有此key,证明是第一次遇到,new一个list*/Map<String,List<String>> map = new HashMap<String,List<String>>();for(String str: strs){int[] count = new int[26];for(int i=0;i<str.length();++i){++count[str.charAt(i)-'a'];}//合成keyStringBuffer key = new StringBuffer();for(int i=0;i<26;++i){if(count[i]!=0){key.append((char)(i+'a'));//字母key.append(count[i]);//次数}}String strKey = key.toString();List<String> list = map.getOrDefault(strKey,new ArrayList<String>());list.add(str);map.put(strKey,list);}return new ArrayList<List<String>>(map.values());//把map转成对应格式}
}

 202.快乐数

题意:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

【输入样例】n=19

【输出样例】true

解题思路:

哈希集合

不断计算n的各位数平方之和,并且将每次计算到的数存到set中,如果在n不等于1的情况下发现当前计算出来的n已经存在set中,证明陷入了死循环

class Solution {private int getNext(int n) {int totalSum = 0;while (n > 0) {int d = n % 10;n = n / 10;totalSum += d * d;}return totalSum;}public boolean isHappy(int n) {Set<Integer> seen = new HashSet<>();while (n != 1 && !seen.contains(n)) {seen.add(n);n = getNext(n);}return n == 1;}
}

 时间: 击败了85.70%

内存: 击败了81.73%

 219.存在重复元素Ⅱ

题意:

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

【输入样例】nums=[1,2,3,1],k=3

【输出样例】true

解题思路:

nums[i]作为key,i作为value,当找到nums[j] == nums[i]时,计算i和j的差距,如果不符合k的要求,修改nums[i]的value为j,因为数组遍历,指针一直在往后走。

class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Map<Integer,Integer> map = new HashMap<Integer,Integer>();int temp;for(int i=0;i<nums.length;++i){temp = nums[i];if(map.containsKey(temp) && (i - map.get(temp) <=k)){return true;}map.put(temp,i);}return false;}
}

时间: 击败了85.19%

内存: 击败了47.36%

 383.赎金信

题意:

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

提示:

  • 1 <= ransomNote.length, magazine.length <= 105
  • ransomNote 和 magazine 由小写英文字母组成

【输入样例】ransomNote="a", magazine = "b"

【输出样例】false

解题思路:

直接统计magazine中每个字符用到的次数,能不能大于等于randomNote中每个字符用到的次数。

class Solution {public boolean canConstruct(String ransomNote, String magazine) {if(magazine.length() < ransomNote.length()){return false;}int[] num = new int[26];for(int i=0;i<magazine.length();++i){++num[magazine.charAt(i) - 'a'];}for(int i=0;i<ransomNote.length();++i){--num[ransomNote.charAt(i) - 'a'];if(num[ransomNote.charAt(i) - 'a'] < 0){return false;}}return true;}
}

时间: 击败了99.33%

内存: 击败了98.96%

 205.同构字符串

题意:

给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

提示:

  • 1 <= s.length <= 5 * 104
  • t.length == s.length
  • s 和 t 由任意有效的 ASCII 字符组成

【输入样例】s="egg",t="add"

【输出样例】true

解题思路:

s.charAt(i)是key,t.charAt(i)是value,必须一致。

class Solution {public boolean isIsomorphic(String s, String t) {if(s==null){return true;}Map<Character,Character> map = new HashMap<Character,Character>();for(int i=0;i<s.length();++i){char key = s.charAt(i);if(!map.containsKey(key)){//如果这个key和value都不存在的话,那就直接添加key,value//key不存在,但是已经有value了,也不行if(map.containsValue(t.charAt(i))){return false;}map.put(key,t.charAt(i));}else{if(t.charAt(i) != map.get(key)){return false;}}}return true;}
}

时间: 击败了58.80%

内存: 击败了76.72%

290.单词规律 

题意:

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

提示:

  • 1 <= pattern.length <= 300
  • pattern 只包含小写英文字母
  • 1 <= s.length <= 3000
  • s 只包含小写英文字母和 ' '
  • s 不包含 任何前导或尾随对空格
  • s 中每个单词都被 单个空格 分隔

【输入样例】pattern="abba", s="dog cat cat dog"

【输出样例】true

解题思路:

与205.同构字符串类似,只不过value从Character变成了String。

class Solution {public boolean wordPattern(String pattern, String s) {if(s == null){return true;}Map<Character,String> map = new HashMap<Character,String>();String[] str = s.split(" ");//根据空格提取单词if(pattern.length() != str.length){return false;}for(int i=0;i<pattern.length();++i){char key = pattern.charAt(i);if(map.containsKey(key) && !(str[i].equals(map.get(key)))){return false;}if(!map.containsKey(key) && map.containsValue(str[i])){return false;}map.put(key,str[i]);}return true;}
}

时间: 击败了55.43%

内存: 击败了61.55%

相关文章:

【LeetCode-经典面试150题-day10】

目录 242.有效的字母异位词 49.字母异位词分组 202.快乐数 219.存在重复元素Ⅱ 383.赎金信 205.同构字符串 290.单词规律 242.有效的字母异位词 题意&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和…...

Transformer在医学影像中的应用综述-分类

文章目录 COVID-19 Diagnosis黑盒模型可解释的模型 肿瘤分类黑盒模型可解释模型 视网膜疾病分类小结 总体结构 COVID-19 Diagnosis 黑盒模型 Point-of-Care Transformer(POCFormer)&#xff1a;利用Linformer将自注意的空间和时间复杂度从二次型降低到线性型。POCFormer有200…...

新服务器基本环境下载conda + docker + docker-compose + git

文章目录 Ubuntu 允许root用户登录 centos无所谓condadockerubuntucentos docker-compose官方下载docker-compose国内镜像 gitUbuntuCentos Ubuntu 允许root用户登录 centos无所谓 # 以普通用户登录系统&#xff0c;创建root用户的密码 sudo passwd root# SSH 放行 sudo sed -…...

Matlab论文插图绘制模板第108期—特征渲染的标签散点图

在之前的文章中&#xff0c;分享了Matlab标签散点图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下特征渲染的标签散点图的绘制模板&#xff0c;以便再添加一个维度的信息。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中…...

设计模式之中介者模式(Mediator)的C++实现

1、中介者模式的提出 在软件组件开发过程中&#xff0c;如果存在多个对象&#xff0c;且这些对象之间存在的相互交互的情况不是一一对应的情况&#xff0c;这种功能组件间的对象引用关系比较复杂&#xff0c;耦合度较高。如果有一些新的需求变化&#xff0c;则不易扩展。中介者…...

css弹性布局的方式

概述 任何一个容器都可以定义为弹性布局容器&#xff0c;使用display:flex(display:inline-flex)开启弹性布局。 2个方向轴&#xff1a;水平主轴和垂直交叉轴 6个容器属性 1.flex-direction &#xff1a;主轴的方向 2.justify-content&#xff1a;子元素在主轴的对齐方式 …...

阿里云源 Python、npm、git、goproxy

阿里云源 Python、npm、git、goproxy 各种设置源的方式也都比较常见&#xff0c;但是根本记不住&#xff0c;每次都查感觉也不太好。 正好发现了个宝藏地址&#xff0c;看起来还挺全的&#xff0c;以后找源也可以先在这个地方翻翻&#xff0c;顺便就搞了几个放到一个脚本里边…...

微服务架构1.0

微服务架构 微服务架构是一种应用程序架构模式&#xff0c;将一个应用程序划分为一组小型、独立、自治的服务&#xff0c;每个服务专注于一个特定的业务功能。 每个微服务都可以独立开发、部署、扩展和维护&#xff0c;通过定义良好的接口和协议&#xff0c;它们可以相互通信…...

iOS开发Swift-基础部分

1.常量 let maxNum 10 //单个常量赋值 let maxNum 10&#xff0c; minNum 2 //多个常量赋值用逗号隔开2.变量 var x 0.0 //单个变量赋值 var x 0.0&#xff0c; y 0.1 //多个变量赋值用逗号隔开3.类型注解 系统可通过赋初始值进行自动推断。 var name&#…...

【LeetCode-经典面试150题-day11】

目录 128.最长连续序列 228.汇总区间 56.合并区间 57.插入区间 452.用最少数量的箭引爆气球 128.最长连续序列 题意&#xff1a; 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并…...

深度学习入门(三):卷积神经网络(CNN)

引入 给定一张图片&#xff0c;计算机需要模型判断图里的东西是什么&#xff1f; &#xff08;car、truck、airplane、ship、horse&#xff09; 一、卷积神经网络整体架构 CONV&#xff1a;卷积计算层&#xff0c;线性乘积求和RELU&#xff1a;激励层&#xff0c;激活函数P…...

网站是如何识别网络爬虫的?

在爬取数据时&#xff0c;你常常会遇到各种网站的反爬机制。网站是如何检测和拦截网络爬虫的呢&#xff1f;本文将为你揭秘网站使用的几种常见的反爬手段&#xff0c;并为你提供一些解决方案&#xff0c;助你越过反爬壁垒&#xff0c;提升你的实际操作效率。 一、Cookie检测 …...

TP-Link 智能灯泡缺陷能让黑客窃取用户 WiFi 密码

来自意大利和英国的研究人员在 TP-Link Tapo L530E 智能灯泡和 TP-Link Tapo 应用程序中发现了4个漏洞&#xff0c;攻击者可以利用这些漏洞窃取目标的 WiFi 密码。 TP-Link Tapo L530E 是包括亚马逊在内的多个市场上最畅销的智能灯泡。TP-link Tapo是一款智能设备管理应用程序…...

接口测试,如何测试?

一 入参 1 正常的入参 输入正常的参数&#xff0c;响应按照接口文档的约定正常返回。 2 异常的入参 参数异常包括&#xff1a;参数为空&#xff0c;多参或少参&#xff0c;错误的参数数据&#xff1b; 错误的参数数据&#xff1a;数据类型错误、非空参数为空&#xff0c;长…...

React源码解析18(11)------ 实现多次setState的批处理

摘要 在React中&#xff0c;如果涉及到了多次setState&#xff0c;组件render几次。setState是同步的还是异步的。这是一个很常见的面试题。 而本篇文章&#xff0c;就是主要实现React中&#xff0c;对于这部分的性能优化&#xff0c;我们称之为批处理。例如当我有下面的JSX。…...

评测凯迪仕K70「千里眼」智能锁:不忘安全初心,便捷体验更上一层

能打败凯迪仕的&#xff0c;只有它自己。这是我们在体验过凯迪仕最新旗舰产品K70「千里眼」智能锁之后的感受。作为凯迪仕2023年最新旗舰机型&#xff0c;K70「千里眼」智能锁在配置上可以说是「机皇」般的存在。3K超高清智能锁猫眼、车规级24GHz雷达、大小双屏设计、三方可视对…...

mysql数据库root密码遗忘后,修改root密码

目录 方式一&#xff1a; 方式二&#xff1a; 2.1 也可以像我这样&#xff0c;普通用户登录进去后 2.2 执行如下命令&#xff0c;将已知的user1的加密密文更新到root中 2.3 查询数据库 2.4 用root用户登录 2.5 登录正常&#xff0c;但这会root登录进去后&#xff0c;无法…...

网络安全(黑客)快速入门~

网络安全的学习需要遵守循序渐进&#xff0c;由浅入深。 通常网络安全学习方法有两种&#xff1a; 方法1&#xff1a;先学习编程&#xff0c;然后学习Web渗透及工具使用等&#xff1b; 适用人群&#xff1a;有一定的代码基础的小伙伴 基础部分 基础部分需要学习以下内容&am…...

华为OD机试 - 数字颠倒(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、Java算法源码投机取巧七、效果展示 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&am…...

leetcode做题笔记87扰乱字符串

使用下面描述的算法可以扰乱字符串 s 得到字符串 t &#xff1a; 如果字符串的长度为 1 &#xff0c;算法停止如果字符串的长度 > 1 &#xff0c;执行下述步骤&#xff1a; 在一个随机下标处将字符串分割成两个非空的子字符串。即&#xff0c;如果已知字符串 s &#xff0c…...

AI产品经理10大高频面试题目解析

扫描下载文档详情页: https://www.didaidea.com/wenku/16613.html...

Picovoice_VN:Arduino端侧越南语语音识别引擎

1. Picovoice_VN&#xff1a;面向嵌入式设备的越南语端侧语音交互引擎 Picovoice_VN 是专为 Arduino 平台&#xff08;特别是 Arduino Nano 33 BLE Sense&#xff09;定制的越南语语音处理 SDK&#xff0c;由加拿大温哥华 Picovoice 公司开发。它并非传统云端语音服务的轻量客户…...

Boomi连续第12次获评“领导者”,并在2026年Gartner®集成平台即服务(iPaaS)魔力象限™中于“执行能力”维度位列最高

Boomi™&#xff08;数据激活领域企业&#xff09;今日宣布&#xff0c;其在2026年Gartner集成平台即服务&#xff08;iPaaS&#xff09;魔力象限™中获评“领导者”&#xff0c;并在“执行能力”维度位居最高。这是Boomi连续第12次获评该报告“领导者”&#xff0c;亦是该魔力…...

Arduino轻量级串口变量监控库cSerialWatcher详解

1. cSerialWatcher 库概述 cSerialWatcher 是一款专为 Arduino 平台设计的轻量级、实时串口变量监控与调试库&#xff0c;核心目标是建立嵌入式端&#xff08;MCU&#xff09;与上位机&#xff08;PC&#xff09;之间高效、低开销的双向变量交互通道。它不依赖复杂协议栈或额外…...

Alpamayo-R1-10B开源模型价值:降低L4研发门槛,让算法团队专注因果逻辑而非工程胶水

Alpamayo-R1-10B开源模型价值&#xff1a;降低L4研发门槛&#xff0c;让算法团队专注因果逻辑而非工程胶水 1. 项目概述 Alpamayo-R1-10B是NVIDIA推出的自动驾驶专用开源视觉-语言-动作&#xff08;VLA&#xff09;模型&#xff0c;作为一套完整的自动驾驶研发工具链&#xf…...

7个ReSwift项目结构最佳实践:Swift状态管理的终极指南

7个ReSwift项目结构最佳实践&#xff1a;Swift状态管理的终极指南 【免费下载链接】ReSwift ReSwift/ReSwift: ReSwift是基于Swift语言构建的状态管理库&#xff0c;灵感来源于Redux模式。通过引入单向数据流和可预测状态变更的理念&#xff0c;ReSwift使得在Swift应用中管理和…...

Qwen3.5-9B作品集:支持红外热成像图+可见光图双模输入的工业设备诊断

Qwen3.5-9B作品集&#xff1a;支持红外热成像图可见光图双模输入的工业设备诊断 1. 模型核心能力展示 Qwen3.5-9B作为新一代多模态大模型&#xff0c;在工业设备诊断领域展现出独特优势。该模型能够同时处理红外热成像图和可见光图像&#xff0c;为设备状态监测提供双重验证。…...

你的选题值得一篇好综述——百考通AI助你站在巨人肩膀上,看清研究方向

在高校学术写作中&#xff0c;文献综述是科研工作的“起跑线”——它不仅体现研究者对领域现状的把握&#xff0c;更直接影响论文的创新性与学术价值。然而&#xff0c;对许多学生而言&#xff0c;撰写一篇逻辑清晰、内容翔实、格式规范的综述常常令人倍感压力&#xff1a;资料…...

ORB_SLAM2环境搭建与EuRoC数据集实战指南

1. ORB_SLAM2环境搭建全攻略 第一次接触ORB_SLAM2时&#xff0c;我也被各种依赖项搞得头大。这个开源SLAM框架确实强大&#xff0c;但环境搭建过程对新手不太友好。经过多次实践&#xff0c;我总结出一套最稳妥的安装方案&#xff0c;帮你避开90%的坑。 1.1 系统环境准备 推荐使…...

Windows平台利用FFmpeg实现高效硬件编解码加速的实战指南(附实测数据)

1. 为什么需要硬件编解码加速&#xff1f; 最近处理4K视频时&#xff0c;我的老电脑风扇狂转得像直升机起飞。直到发现FFmpeg的硬件加速功能&#xff0c;原来同样的转码任务&#xff0c;GPU参与后耗时直接减半。对于经常需要处理视频的开发者来说&#xff0c;硬件编解码加速就像…...