【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.有效的字母异位词 题意: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和…...
Transformer在医学影像中的应用综述-分类
文章目录 COVID-19 Diagnosis黑盒模型可解释的模型 肿瘤分类黑盒模型可解释模型 视网膜疾病分类小结 总体结构 COVID-19 Diagnosis 黑盒模型 Point-of-Care Transformer(POCFormer):利用Linformer将自注意的空间和时间复杂度从二次型降低到线性型。POCFormer有200…...
新服务器基本环境下载conda + docker + docker-compose + git
文章目录 Ubuntu 允许root用户登录 centos无所谓condadockerubuntucentos docker-compose官方下载docker-compose国内镜像 gitUbuntuCentos Ubuntu 允许root用户登录 centos无所谓 # 以普通用户登录系统,创建root用户的密码 sudo passwd root# SSH 放行 sudo sed -…...
Matlab论文插图绘制模板第108期—特征渲染的标签散点图
在之前的文章中,分享了Matlab标签散点图的绘制模板: 进一步,再来分享一下特征渲染的标签散点图的绘制模板,以便再添加一个维度的信息。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中…...
设计模式之中介者模式(Mediator)的C++实现
1、中介者模式的提出 在软件组件开发过程中,如果存在多个对象,且这些对象之间存在的相互交互的情况不是一一对应的情况,这种功能组件间的对象引用关系比较复杂,耦合度较高。如果有一些新的需求变化,则不易扩展。中介者…...
css弹性布局的方式
概述 任何一个容器都可以定义为弹性布局容器,使用display:flex(display:inline-flex)开启弹性布局。 2个方向轴:水平主轴和垂直交叉轴 6个容器属性 1.flex-direction :主轴的方向 2.justify-content:子元素在主轴的对齐方式 …...
阿里云源 Python、npm、git、goproxy
阿里云源 Python、npm、git、goproxy 各种设置源的方式也都比较常见,但是根本记不住,每次都查感觉也不太好。 正好发现了个宝藏地址,看起来还挺全的,以后找源也可以先在这个地方翻翻,顺便就搞了几个放到一个脚本里边…...
微服务架构1.0
微服务架构 微服务架构是一种应用程序架构模式,将一个应用程序划分为一组小型、独立、自治的服务,每个服务专注于一个特定的业务功能。 每个微服务都可以独立开发、部署、扩展和维护,通过定义良好的接口和协议,它们可以相互通信…...
iOS开发Swift-基础部分
1.常量 let maxNum 10 //单个常量赋值 let maxNum 10, minNum 2 //多个常量赋值用逗号隔开2.变量 var x 0.0 //单个变量赋值 var x 0.0, y 0.1 //多个变量赋值用逗号隔开3.类型注解 系统可通过赋初始值进行自动推断。 var name&#…...
【LeetCode-经典面试150题-day11】
目录 128.最长连续序列 228.汇总区间 56.合并区间 57.插入区间 452.用最少数量的箭引爆气球 128.最长连续序列 题意: 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并…...
深度学习入门(三):卷积神经网络(CNN)
引入 给定一张图片,计算机需要模型判断图里的东西是什么? (car、truck、airplane、ship、horse) 一、卷积神经网络整体架构 CONV:卷积计算层,线性乘积求和RELU:激励层,激活函数P…...
网站是如何识别网络爬虫的?
在爬取数据时,你常常会遇到各种网站的反爬机制。网站是如何检测和拦截网络爬虫的呢?本文将为你揭秘网站使用的几种常见的反爬手段,并为你提供一些解决方案,助你越过反爬壁垒,提升你的实际操作效率。 一、Cookie检测 …...
TP-Link 智能灯泡缺陷能让黑客窃取用户 WiFi 密码
来自意大利和英国的研究人员在 TP-Link Tapo L530E 智能灯泡和 TP-Link Tapo 应用程序中发现了4个漏洞,攻击者可以利用这些漏洞窃取目标的 WiFi 密码。 TP-Link Tapo L530E 是包括亚马逊在内的多个市场上最畅销的智能灯泡。TP-link Tapo是一款智能设备管理应用程序…...
接口测试,如何测试?
一 入参 1 正常的入参 输入正常的参数,响应按照接口文档的约定正常返回。 2 异常的入参 参数异常包括:参数为空,多参或少参,错误的参数数据; 错误的参数数据:数据类型错误、非空参数为空,长…...
React源码解析18(11)------ 实现多次setState的批处理
摘要 在React中,如果涉及到了多次setState,组件render几次。setState是同步的还是异步的。这是一个很常见的面试题。 而本篇文章,就是主要实现React中,对于这部分的性能优化,我们称之为批处理。例如当我有下面的JSX。…...
评测凯迪仕K70「千里眼」智能锁:不忘安全初心,便捷体验更上一层
能打败凯迪仕的,只有它自己。这是我们在体验过凯迪仕最新旗舰产品K70「千里眼」智能锁之后的感受。作为凯迪仕2023年最新旗舰机型,K70「千里眼」智能锁在配置上可以说是「机皇」般的存在。3K超高清智能锁猫眼、车规级24GHz雷达、大小双屏设计、三方可视对…...
mysql数据库root密码遗忘后,修改root密码
目录 方式一: 方式二: 2.1 也可以像我这样,普通用户登录进去后 2.2 执行如下命令,将已知的user1的加密密文更新到root中 2.3 查询数据库 2.4 用root用户登录 2.5 登录正常,但这会root登录进去后,无法…...
网络安全(黑客)快速入门~
网络安全的学习需要遵守循序渐进,由浅入深。 通常网络安全学习方法有两种: 方法1:先学习编程,然后学习Web渗透及工具使用等; 适用人群:有一定的代码基础的小伙伴 基础部分 基础部分需要学习以下内容&am…...
华为OD机试 - 数字颠倒(Java 2023 B卷 100分)
目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、Java算法源码投机取巧七、效果展示 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&am…...
leetcode做题笔记87扰乱字符串
使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止如果字符串的长度 > 1 ,执行下述步骤: 在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,…...
第一章 初识Linux(含VMware安装Ubuntu、CentOS、Windows、FinalShell、快照)
目录 一、 课程的介绍 1.为什么要学习Linux 2.课程的安排 3.如何学习Linux 二、操作系统概述 1.学习目标 2.计算机的硬件和软件 3.什么是操作系统 4.常见的操作系统 5.本小节的总结 三、初识Linux 1.学习目标 2.Linux的诞生 3.Linux的内核 …...
MATLAB算法实战应用案例精讲-【图像处理】OCR识别方法-CRNN
目录 OCR综述 什么是OCR OCR发展历程 OCR 常用检测方法 基于回归的方法 1) box回归...
无涯教程-PHP - preg_grep()函数
preg_grep() - 语法 array preg_grep ( string $pattern, array $input [, int $flags] ); 返回由与给定模式匹配的输入数组元素组成的数组。 如果将flag设置为PREG_GREP_INVERT,则此函数返回输入数组中与给定模式不匹配的元素。 preg_grep() - 返回值 返回使用…...
【Linux】Nginx解决跨域问题
文章目录 一、跨域问题二、解决跨域问题三、结尾 一、跨域问题 在前后端分离的项目中,前端通常运行在一个域名或端口上,而后端运行在另一个域名或端口上。当浏览器发起跨域请求时,即前端页面向后端发送请求的域名、端口或协议与当前页面的域…...
无涯教程-PHP - preg_split()函数
preg_split() - 语法 array preg_split (string pattern, string string [, int limit [, int flags]]); preg_split()函数的操作与split()完全相同,只不过正则表达式被接受为pattern的输入参数。 如果指定了可选的输入参数limit,则仅返回子字符串的限…...
B. Spreadsheets
Problem - B - Codeforces 问题描述:excel有两种情况, Rr_nCc_n:R行数C列数ZZZ(列数)行数。 对这两个进行相互转换。 细节: 准确判断这两种情况 string str; cin>>str; auto posR str.find("R"), posC st…...
matlab面向对象
一、面向对象编程 1.1 面向过程与面向对象 区别: 面向过程的核心是一系列函数,执行过程是依次使用每个函数面向对象的核心是对象(类)及其属性、方法,每个对象根据需求执行自己的方法以解决问题 对象:单个…...
01、Cannot resolve MVC View ‘xxxxx前端页面‘
Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码:前端这里引入了 thymeleaf 模板 解决: 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…...
时空智友企业流程化管控系统文件上传漏洞复现
0x01 产品简介 时空智友企业流程化管控系统是一个功能丰富、灵活可定制的企业管理工具。通过该系统,企业能够实现流程的自动化、协同的提升、数据的洞察和决策的优化,从而提高工作效率、管理水平和企业竞争力。 0x02 漏洞概述 时空智友企业流程化管控系…...
【已解决】Authenticator:无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知
问题: 小米手机的Authenticator添加微软账户扫描QR码提示:无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知 解决办法: 1、在通知管理中允许Authenticator所有通知。 2、在手机设置-账户与同步里找到谷歌基础服…...
网站运行环境建设方案/杭州谷歌seo公司
我已经在我的项目中实现了一个Calendarview,我可以获取月份,月份和年份,但是我找不到任何获取星期几的方法,我的代码是这样的:view new CalendarView(this);setContentView(view);view.setOnDateChangeListener(new OnDateChangeListener() {Overridepublic void o…...
厂房建设公司哪家好/太原网站制作优化seo
在OneNote中DIY自己需要的模板https://www.zhihu.com/video/1198284361613672449在印象笔记中,通过表格的添加和自定义,我们可以做出几乎任何生活、工作或学习当中所需的模板。而在 OneNote 当中,可以怎么做呢?在 Windows 电脑的 …...
孟州哪里可以做网站/北京seo培训
一、Gamebryo的基本构成及其工作流程Gamebryo是一款便捷且易上手的开放式跨平台游戏开发引擎,他整合了多家当今的成熟技术。图01说明了Gamebryo的基本构成和技术特点。我们随后对其中的主要技术特点做简单的介绍。Gamebryo的基本构成和技术特点 那么,Gam…...
怎么样做网站页面/白度
系统环境变量加载顺序 /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc 1、/etc/profile和 /etc/paths是系统级别的,系统启动就会加载,所有用户共享。 2、如果~/.bash_profile文件存在,则后面的几个文件就…...
目前网站开发 用java 还是php/品牌营销策略分析
博主曾经是一名文艺青年,不信请看博主以前写的文: 关于台灯 2011年11月5日桌上有一盏台灯,落满了灰尘。 所以你总是会看到细微的灰尘散落在光线里,若隐若现,在黑暗中静静飘忽,虚幻而又真实,有…...
淮南网课/seo网站内部优化方案
全球及中国工业草酸市场运营分析与前景趋势研究报告2022-2028年 【报告编号】: 413774 【出版时间】: 2022年2月 【出版单位】: 中商经济研究网 1 工业草酸市场概述 1.1 工业草酸行业概述及统计范围 1.2 按照不同产品类型,工业草酸主要可以分为如下几个类别…...