剑指 Offer II 014. 字符串中的变位词

  • 题目
  • 示例
  • 解答

题目来源为leetcode

题目

给定两个字符串s1s2,写一个函数来判断s2是否包含s1的某个变位词。

换句话说,第一个字符串的排列之一是第二个字符串的子串

示例

  • 示例1:

    输入: s1 = “ab” s2 = “eidbaooo”
    输出: True
    解释: s2 包含 s1 的排列之一 (“ba”).

  • 示例2:

    输入: s1= “ab” s2 = “eidboaoo”
    输出: False

  • 提示

    • 1<=s1.length,s2.length<=1041 <= s1.length, s2.length <= 10^41<=s1.length,s2.length<=104
    • s1 和 s2 仅包含小写字母

解答

  1. 解法一:

    class Solution {/*** 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。* 换句话说,第一个字符串的排列之一是第二个字符串的 子串 。*/public boolean checkInclusion(String s1, String s2) {MyHashMap map = new MyHashMap();int right = s2.length() - s1.length();for (int i = 0; i <= right; i++) {map.init(s1);String subString = s2.substring(i, i + s1.length());if (map.judge(subString)) {return true;}}return false;}class MyHashMap {private int[] array = new int[27];public void init(String s) {Arrays.fill(array, 0);for (int i = 0; i < s.length(); i++) {int i1 = s.charAt(i) - 'a';array[i1]++;}}public boolean judge(String s) {for (int i = 0; i < s.length(); i++) {int i1 = s.charAt(i) - 'a';if (array[i1] - 1 >= 0) {array[i1]--;} else {return false;}}return true;}}
    }
    

  2. 解法二:

    class Solution {/*** 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。* 换句话说,第一个字符串的排列之一是第二个字符串的 子串 。*/public boolean checkInclusion(String s1, String s2) {// 异常处理if (s1.length() > s2.length()) {return false;}// 自定义mapint[] array = new int[26];for (int i = 0; i < s1.length(); i++) {array[(s1.charAt(i) - 'a')]++;array[(s2.charAt(i) - 'a')]--;}// 判断是否已经找到if (isAllZeros(array)) {return true;}for (int i = s1.length(); i < s2.length(); i++) {array[s2.charAt(i) - 'a']--;array[s2.charAt(i - s1.length()) - 'a']++;if (isAllZeros(array)) {return true;}}return false;}private boolean isAllZeros(int[] array) {for (int j : array) {if (j != 0) {return false;}}return true;}
    }
    

剑指 Offer II 014. 字符串中的变位词相关推荐

  1. 剑指 Offer II 028. 数组中出现次数超过一半的数字

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找 ...

  2. 算法学习——剑指 Offer II 040. 矩阵中最大的矩形(Java实现)

    1. 题意 这是LeetCode上的 [040,矩阵中最大的矩形],难度为 [困难] 2. 思路分析 这道题跟上一题一样还是求最大矩形的面积,所以求最大矩形的面积可以参考直方图的最大矩形面积,那么这道 ...

  3. 剑指 Offer II 076. 数组中的第 k 大的数字

    题目 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素. 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 输入: [3,2,1,5,6,4 ...

  4. 915. 分割数组、剑指 Offer II 076. 数组中的第 k 大的数字

    LeetCode题解 1.分割数组 2.数组中的第 k 大的数字 1.分割数组 题目描述: ➡️挑战链接⬅️ 分析: 首先题目叙述的很简单: 要求呢 1.左右两个区间元素必须连续 2.左右区间必须都有 ...

  5. Leetcode刷题笔记——剑指offer II (一)【整数、数组、字符串、链表】

    目录 整数 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 00 ...

  6. 力扣OJ 剑指 Offer II

    目录 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 004. ...

  7. Leetcode刷题笔记——剑指offer II (六)【图】

    文章目录 图 695. 岛屿的最大面积 剑指 Offer II 106. 二分图 (每条边的两个结点都来自不同的集合) 剑指 Offer II 107. 矩阵中的距离 (最短路问题,建图,BFS) 剑 ...

  8. 剑指Offer II --- 2021/9/2

    目录 剑指Offer II 116. 朋友圈 剑指Offer II 098. 路径的数目 剑指Offer II 068. 查找插入位置 剑指Offer II 078. 合并排序链表 剑指Offer I ...

  9. 剑指 Offer II 017. 含有所有字符的最短字符串

    剑指 Offer II 017. 含有所有字符的最短字符串 给定两个字符串 s 和 t .返回 s 中包含 t 的所有字符的最短子字符串.如果 s 中不存在符合条件的子字符串,则返回空字符串 &quo ...

最新文章

  1. 革命性移动端开发框架-Flutter时间简史
  2. php在线备忘录,一个会话备忘录小程序的实现方法
  3. 算法与面试之-如何准备算法面试
  4. 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!...
  5. 神经网络 并行预测_研究人员研究了为什么神经网络可以有效地进行预测
  6. Http和Rpc框架的区别
  7. Redis 使用 List 实现消息队列的利与弊
  8. 海龟交易法则09_海龟式积木
  9. VMware、vSphere 6.0 介绍
  10. 《深入应用C++11:代码优化与工程级应用》勘误表
  11. 制作小游戏贪吃蛇即解决将python制作成exe
  12. 同花顺黄金分割线及斐波那契数列分析网格(主图公式)
  13. 谈谈人们常说的“一时糊涂,鬼迷心窍”!
  14. SEM扫描电镜知识点扫盲,请收好
  15. 1024*1024像素的图片,文件大小多少?
  16. http://www.youku.com/playlist_show/id_4637211.html
  17. 推荐uml 流程图 在线编辑工具
  18. 百度地图InfoWindow信息窗口的自定义和样式修改
  19. 天梯赛(cccc)总结(写于4.1号)
  20. gitlab 的备份与恢复

热门文章

  1. SIMPLE/REUSE/BATCH 三种执行器的区别?
  2. Spring Bean 作用域之间的区别?
  3. Spring容器初始化实现V1 版本
  4. SpringMVC拦截器-拦截器的作用
  5. 类加载器的概述和分类
  6. kafka高可用集群课程介绍
  7. web服务器软件_概述
  8. mysql1577_使用Navicat for MySQL的1577错误解决办法
  9. linux 杀死脚本,linux – 如何在Bash脚本被杀死时杀死当前命令
  10. 解决GitLab中使用SSH的git clone总是提示输入密码且任何密码都不对