1033-字符串中的变位词
题目如下
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
示例 1:
输入: s1 = “ab” s2 = “eidbaooo”
输出: True
解释: s2 包含 s1 的排列之一 (“ba”).
示例 2:
输入: s1= “ab” s2 = “eidboaoo”
输出: False
解题方法1
滑动窗口
class Solution
{public:bool checkInclusion(string s1, string s2) {int n = s1.length(), m = s2.length();if (n > m){return false;}vector<int> cnt1(26), cnt2(26);for (int i = 0; i < n; ++i) {++cnt1[s1[i] - 'a'];++cnt2[s2[i] - 'a'];}if (cnt1 == cnt2){return true;}for (int i = n; i < m; ++i) {++cnt2[s2[i] - 'a'];--cnt2[s2[i - n] - 'a'];if (cnt1 == cnt2){return true;}}return false;}
};
优化
class Solution
{public:bool checkInclusion(string s1, string s2){int n = s1.length(), m = s2.length();if (n > m){return false;}vector<int> cnt(26);for (int i = 0; i < n; ++i) {--cnt[s1[i] - 'a'];++cnt[s2[i] - 'a'];}int diff = 0;for (int c : cnt) {if (c != 0) {++diff;}}if (diff == 0) {return true;}for (int i = n; i < m; ++i) {int x = s2[i] - 'a', y = s2[i - n] - 'a';if (x == y) {continue;}if (cnt[x] == 0) {++diff;}++cnt[x];if (cnt[x] == 0) {--diff;}if (cnt[y] == 0) {++diff;}--cnt[y];if (cnt[y] == 0) {--diff;}if (diff == 0){return true;}}return false;}
};
解题方法2
双指针
class Solution
{public:bool checkInclusion(string s1, string s2) {int n = s1.length(), m = s2.length();if (n > m) {return false;}vector<int> cnt(26);for (int i = 0; i < n; ++i){--cnt[s1[i] - 'a'];}int left = 0;for (int right = 0; right < m; ++right) {int x = s2[right] - 'a';++cnt[x];while (cnt[x] > 0) {--cnt[s2[left] - 'a'];++left;}if (right - left + 1 == n){return true;}}return false;}
};
1033-字符串中的变位词相关推荐
- 剑指 Offer II 014. 字符串中的变位词
剑指 Offer II 014. 字符串中的变位词 题目 示例 解答 题目来源为leetcode 题目 给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的某个变位词. 换句话说,第一个字符串 ...
- 2021-11-14剑指OfferII014.字符串中的变位词
class Solution:def checkInclusion(self, s1: str, s2: str) -> bool:n1 = len(s1)n2 = len(s2)if n1 & ...
- leetcode 字符串中的变位词
题目链接 思路:滑动窗口 分析:从s2中查找s1的位置,不过这里s1在s2中的字符顺序可以是乱的,但是长度肯定是一样的,那么这个长度就是滑动窗口的长度.我们用两个窗口,长度都是s1的长度,然后每次比对 ...
- 浙大python判断两个字符串是否为变位词_python数据结构与算法 变位词
变位词 问题简述 "变位词"判断问题:所谓 "变位词" 是指两个词之间存在组成字母的重新排列关系,例如 Heart 和 Earth,python 和 typho ...
- 浙大python判断两个字符串是否为变位词_算法2----------变位词
1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...
- java变位词_Java程序检查字符串是否是变位词
字符串变位词检查:有多种方法来查找两个字符串是变位词还是非变位词.经典的方法是获取每个字符串的字符数组,然后比较它们,如果两个字符数组都相等,那么字符串就是变位词.但在进行比较之前,请确保两个字符串的 ...
- 判断两个字符串是否互为变位词
看了个算法题目,觉得有趣,就换成了java版本的. 原文地址:blog.csdn.net/ns_code/article/details/21409663 题目: Write a method to ...
- 7-20 判断两个字符串是否为变位词 (10 分)如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy
7-20 判断两个字符串是否为变位词 (10 分) 如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词.比如,"heart"与"earth" ...
- 浙大python判断两个字符串是否为变位词_Python实现对变位词的判断
Python实现对变位词的判断 什么是变位词呢?即两个单词都是由相同的字母组成,而各自的字母顺序不同,譬如python和typhon,heart和earth. 变位词的判断 既然我们知道了变位词的定义 ...
- Java 处理字符串中的敏感词 配置模式
最新有个小业务需要用到批量去除敏感词,调用量非常频繁且对性能要求较大,且关键字是随时会增加的,因此也就不能使用简单的替换,而是需用用到配置文件方式处理. 两个类,一段配置文件 1.初始化敏感词库,将敏 ...
最新文章
- Java23种设计模式学习笔记【目录总贴】
- C++编译 C # 调用方法
- python运行一个项目_Django 项目创建到启动(最全最详细的第一个项目)
- qemu交叉编译arm内核_arm qemu (1) 内核启动调试环境搭建
- java Socket 长连接 心跳包 客户端 信息收发 demo
- 引入外部化的配置文件
- 如何在Windows 10中将您喜欢的设置固定到开始菜单
- ssm框架简单实现文件上传
- linux内核工程师必须知道的三十道题
- (24)System Verilog设计十进制计数器
- cocos2d的单例
- java大津法确定阈值,大津法得到自适应阈值
- MyEclipse取消验证Js的两种方法
- div3 C. Dominant Piranha
- 杆刚度校核c语言程序,第12章杆件的强度、刚度计算.doc
- 重读《从菜鸟到测试架构师》-- 从专家到高手
- 前端学习01 HTML入门
- include_path='/usr/local/php7.0/lib/php (宝塔一键安装)报错解决方法
- Matlab sound函数播放与停止播放音频
- C语言程序设计:输入一个三角形的三条边长,求出三角形的面积。