LeetCode-567:字符串的排列
题目描述:
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
示例1:
输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解释: s2 包含 s1 的排列之一 ("ba").
示例2:
输入: s1= "ab" s2 = "eidboaoo"
输出: False
思路分析:
看到子串就想到滑动窗口,先试着用滑动窗口解题。
直接套用labuladong的算法小抄的滑动窗口模板:
class Solution {public boolean checkInclusion(String s1, String s2) {int len=s2.length();HashMap<Character,Integer> need=new HashMap<>();HashMap<Character,Integer> window=new HashMap<>();for(char c: s1.toCharArray()){need.put(c,need.getOrDefault(c,0)+1);}int left=0,right=0,res=0;int valid=0;while(right<len){char r=s2.charAt(right);right++;if(need.containsKey(r)){window.put(r,window.getOrDefault(r,0) + 1);if(need.get(r).equals(window.get(r))){valid++;}}while(right-left>=s1.length()){if(valid==need.size()){return true;}char l=s2.charAt(left);left++;if(need.containsKey(l)){if(window.get(l).equals(need.get(l))){valid--;}window.put(l,window.getOrDefault(l,0)-1);}}}return false;}
}
LeetCode-567:字符串的排列相关推荐
- LeetCode 567. 字符串的排列 (滑动窗口哈希表)
567. 字符串的排列 题意: 第一个字符串的排列之一是第二个字符串的子串 即判断第二个字符串是否包含某个子串,这个子串的字符以及字符数量要求与第一个字符串相同 解法1 (暴力法) 按照第一个字符串的 ...
- leetcode 567. 字符串的排列(滑动窗口)
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: 输入: s1 = "ab" s2 ...
- LeetCode242/567.字符串的排列:有效的字母异位词(Kotlin语言)
LeetCode242.有效的字母异位词 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram" ...
- 567.字符串的排列
难度:中等 目录 一.问题描述 二.解题思路 1.思路 三.解题 1.代码实现 2.时间复杂度 and 空间复杂度 一.问题描述 这里直接采用LeetCode上面的问题描述. 给你两个字符串 s1 和 ...
- 文巾解题 567. 字符串的排列
1 题目描述 2 解题思路:滑动窗口: 因为不管排列怎么排,s1字符串中的各个字母的个数是不变的.所以我们可以先设定一个大小和s1一样的滑动窗口.然后对s1和滑动窗口扫到的s2部分进行排序.如果而这一 ...
- leetcode 567. Permutation in String 字符串的排列 滑动窗口法
题目 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列.换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1:输入: s1 = "ab" s ...
- 【LeetCode】剑指 Offer 38. 字符串的排列
[LeetCode]剑指 Offer 38. 字符串的排列 文章目录 [LeetCode]剑指 Offer 38. 字符串的排列 package offer;import java.util.Hash ...
- 【字符串全排列】LeetCode 567. Permutation in String
[字符串全排列]LeetCode 567. Permutation in String Solution1:[超时,未能AC] 得到s1的所有全排列组合,然后在s2中查找s1的全排列集合 因为超时,未 ...
- LeetCode——剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 题目 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.示例:输入:s = "abc" ...
- 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)
仰望星空的人,不应该被嘲笑 题目描述 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq", ...
最新文章
- spring定时每天早上八点_Spring Boot教程(13) – 简单定时任务
- 英特尔大地震!解雇首席工程官,7纳米延期,或面临集体诉讼……
- JSON快速转C#实体类
- php和mysql的概述_PHP的MySQL扩展:MySQL数据库概述_MySQL
- elon函数_Neuroink Elon麝香制造中的灾难
- python jieba 文本相似度_文本相似度分析(基于jieba和gensim)
- 关于 richedit 控件
- 系列10—消息中间件
- 如何解决设置虚拟服务器不生效,nginx虚拟主机的配置不生效
- UE4 iOS游戏开发
- Node.js 抓取电影天堂新上电影节目单及ftp链接
- 代码里经常看见idle,是什么意思
- 使用WMI编程获取主机硬件信息(CPU_ID,硬盘、主板、BIOS序列号,Mac地址)
- 如何在Android Studio中获取SHA-1指纹证书以获得调试模式?
- Mppt光伏最大功率点跟踪控制matlab仿真
- 图解linux文件系统,linux系统的基本构成和文件系统的结构(配图解)
- MATLAB代码:基于分时电价条件下家庭能量管理策略研究
- python 爬取学信网登录页面
- Direct2D 介绍
- 【SSM框架】MyBatis