567. 字符串的排列

题意:
  • 第一个字符串的排列之一是第二个字符串的子串
  • 即判断第二个字符串是否包含某个子串,这个子串的字符以及字符数量要求与第一个字符串相同
解法1 (暴力法)
  • 按照第一个字符串的长度找出第二个字符串的所有相应长度的子串
  • 比较每个子串与第一个字符串的字符以及字符数量是否相同 (哈希表)
class Solution {public static boolean checkInclusion(String s1, String s2) {Map<Character, Integer> map1 = new HashMap<>();Map<Character, Integer> map2 = new HashMap<>();map1 = countChar(s1);for (int start = 0; start < s2.length(); start++) {map2.clear();int end;if ((end = start + s1.length() - 1) > s2.length() - 1) break;map2 = countChar(s2.substring(start, end + 1));if (map2.equals(map1)) return true;}return false;}public static Map<Character, Integer> countChar(String s) {Map<Character, Integer> map = new HashMap<>();for (int i = 0; i < s.length(); i++) {if (map.containsKey(s.charAt(i))) {map.put(s.charAt(i), map.get(s.charAt(i)) + 1);} else {map.put(s.charAt(i), 1);}}return map;}
}
解法2 (滑动窗口)
class Solution {public static boolean checkInclusion(String s1, String s2) {Map<Character, Integer> map1 = new HashMap<>();Map<Character, Integer> map2 = new HashMap<>();map1 = countChar(s1);int start = 0;for (int end = 0; end < s2.length(); end++) {map2.put(s2.charAt(end), map2.getOrDefault(s2.charAt(end), 0) + 1);while (findAll(map1, map2)) {if (map2.equals(map1)) return true;map2.put(s2.charAt(start), map2.get(s2.charAt(start)) - 1);if (Integer.valueOf(0).equals(map2.get(s2.charAt(start)))) map2.remove(s2.charAt(start));start++;}}return false;}public static boolean findAll(Map<Character, Integer> map1, Map<Character, Integer> map2) {Set<Map.Entry<Character, Integer>> set = map1.entrySet();for (Map.Entry<Character, Integer> entry : set) {if (entry.getValue() > map2.getOrDefault(entry.getKey(), 0)) return false;}return true;}public static Map<Character, Integer> countChar(String s) {Map<Character, Integer> map = new HashMap<>();for (int i = 0; i < s.length(); i++) {map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);}return map;}
}

LeetCode 567. 字符串的排列 (滑动窗口哈希表)相关推荐

  1. leetcode 567. Permutation in String 字符串的排列 滑动窗口法

    题目 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列.换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1:输入: s1 = "ab" s ...

  2. leetcode 567. 字符串的排列(滑动窗口)

    给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: 输入: s1 = "ab" s2 ...

  3. LeetCode 76. 最小覆盖子串 (滑动窗口哈希表)

    LeetCode 76. 最小覆盖子串 思路: 准备一个map1记录字符串t(字符, 字符个数) 准备一个map2记录在s的窗口中所包含的t串字符(字符,字符个数) 左端点收缩条件:窗口内已经覆盖了t ...

  4. LeetCode 3. 无重复字符的最长子串 (滑动窗口哈希表)

    3. 无重复字符的最长子串 题意: 找子串 子串中无重复字符 要求子串长度最长 解法1(暴力法) 思路: 建立一个长度不断变小的滑动窗口 用一个指针指针扫描窗口内的每个元素: 如果除去指针指向的那个元 ...

  5. LeetCode 159. 至多包含两个不同字符的最长子串 (滑动窗口哈希表)

    159. 至多包含两个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringTwoDistinct(String s) {// 记录 ...

  6. LeetCode242/567.字符串的排列:有效的字母异位词(Kotlin语言)

    LeetCode242.有效的字母异位词 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram" ...

  7. LeetCode算法题6:滑动窗口*

    文章目录 前言 一.无重复字符的最长子串 思路 1: 思路 2: 二.字符串的排列 思路 1: 思路 2: 思路 3: 思路 3 plus: 思路 3 plus plus: 思路 4: 思路 5: 总 ...

  8. 567.字符串的排列

    难度:中等 目录 一.问题描述 二.解题思路 1.思路 三.解题 1.代码实现 2.时间复杂度 and 空间复杂度 一.问题描述 这里直接采用LeetCode上面的问题描述. 给你两个字符串 s1 和 ...

  9. LeetCode Longest Repeating Character Replacement(滑动窗口)

    问题:给出一个由大写字母构成的字符串,可以对字符串最多作k次操作,将一个字符转换为另外一个字符. 找出操作后最长的重复子串 思路:使用滑动窗口,及用一个长度为26的数组记录字符个数.初始时,窗口大小为 ...

最新文章

  1. 怎么用python处理excel文件-Python自动化如何处理excel文件数据
  2. Web性能优化:What? Why? How?
  3. SAP CRM的user status和system status
  4. 前端小白也能快速学会的博客园博客美化全攻略
  5. 【计蒜客 - 蓝桥训练】轻重搭配(贪心,STLset 或 二分)
  6. SQLServer 优化SQL语句:in 和not in的替代方案
  7. VB讲课笔记05:数据输入输出
  8. 信息系统项目管理00——高项大观
  9. 电话机器人源码安装教程
  10. POJ 3537 Crosses and Crosses 博弈论 SG函数 记忆化搜索
  11. 2017埙箫简谱清单分享(附音频Demo)
  12. 美的集团计算机综合面试群面,美的集团面试
  13. 使用Dir函数遍历文件和目录
  14. Linux云计算架构师进阶班-Docker-K8s-Devops-Openstack
  15. QT 中控件缩放比列设置
  16. WebView实现改变选中区域颜色以及添加下划线
  17. 今天开始学Convex Optimization:引言、第1章基本概念介绍
  18. IDA Python路径问题
  19. Amq 使用+springboot
  20. 安全服务工程师的自我修养

热门文章

  1. html中的a标签、img标签、iframe标签、列表标签
  2. BZOJ 1619 [Usaco2008 Nov]Guarding the Farm 保卫牧场:dfs【灌水】
  3. Java Socket 编程
  4. java去除字符串中的特定字符
  5. 解决不同浏览器下载excel文件中文名称乱码问题
  6. 【Java从0到架构师】Zookeeper - 系统高可用、分布式的基本概念、Zookeeper 应用场景
  7. Mybatis逆向工程(生成实体类)开发指南
  8. weblogic创建多个域 及域的配置方法 war包部署及访问测试
  9. 机器学习预测港股打新收益
  10. 把可视化放到年终报告里,到底有多赞?