剑指 Offer II 014. 字符串中的变位词
剑指 Offer II 014. 字符串中的变位词
- 题目
- 示例
- 解答
题目来源为leetcode
题目
给定两个字符串s1
和s2
,写一个函数来判断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 仅包含小写字母
解答
解法一:
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;}} }
解法二:
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. 字符串中的变位词相关推荐
- 剑指 Offer II 028. 数组中出现次数超过一半的数字
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找 ...
- 算法学习——剑指 Offer II 040. 矩阵中最大的矩形(Java实现)
1. 题意 这是LeetCode上的 [040,矩阵中最大的矩形],难度为 [困难] 2. 思路分析 这道题跟上一题一样还是求最大矩形的面积,所以求最大矩形的面积可以参考直方图的最大矩形面积,那么这道 ...
- 剑指 Offer II 076. 数组中的第 k 大的数字
题目 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素. 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 输入: [3,2,1,5,6,4 ...
- 915. 分割数组、剑指 Offer II 076. 数组中的第 k 大的数字
LeetCode题解 1.分割数组 2.数组中的第 k 大的数字 1.分割数组 题目描述: ➡️挑战链接⬅️ 分析: 首先题目叙述的很简单: 要求呢 1.左右两个区间元素必须连续 2.左右区间必须都有 ...
- Leetcode刷题笔记——剑指offer II (一)【整数、数组、字符串、链表】
目录 整数 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 00 ...
- 力扣OJ 剑指 Offer II
目录 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 004. ...
- Leetcode刷题笔记——剑指offer II (六)【图】
文章目录 图 695. 岛屿的最大面积 剑指 Offer II 106. 二分图 (每条边的两个结点都来自不同的集合) 剑指 Offer II 107. 矩阵中的距离 (最短路问题,建图,BFS) 剑 ...
- 剑指Offer II --- 2021/9/2
目录 剑指Offer II 116. 朋友圈 剑指Offer II 098. 路径的数目 剑指Offer II 068. 查找插入位置 剑指Offer II 078. 合并排序链表 剑指Offer I ...
- 剑指 Offer II 017. 含有所有字符的最短字符串
剑指 Offer II 017. 含有所有字符的最短字符串 给定两个字符串 s 和 t .返回 s 中包含 t 的所有字符的最短子字符串.如果 s 中不存在符合条件的子字符串,则返回空字符串 &quo ...
最新文章
- 革命性移动端开发框架-Flutter时间简史
- php在线备忘录,一个会话备忘录小程序的实现方法
- 算法与面试之-如何准备算法面试
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!...
- 神经网络 并行预测_研究人员研究了为什么神经网络可以有效地进行预测
- Http和Rpc框架的区别
- Redis 使用 List 实现消息队列的利与弊
- 海龟交易法则09_海龟式积木
- VMware、vSphere 6.0 介绍
- 《深入应用C++11:代码优化与工程级应用》勘误表
- 制作小游戏贪吃蛇即解决将python制作成exe
- 同花顺黄金分割线及斐波那契数列分析网格(主图公式)
- 谈谈人们常说的“一时糊涂,鬼迷心窍”!
- SEM扫描电镜知识点扫盲,请收好
- 1024*1024像素的图片,文件大小多少?
- http://www.youku.com/playlist_show/id_4637211.html
- 推荐uml 流程图 在线编辑工具
- 百度地图InfoWindow信息窗口的自定义和样式修改
- 天梯赛(cccc)总结(写于4.1号)
- gitlab 的备份与恢复