题目:

两个字符串 s1s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false

题解:

排列不会改变字符串中每个字符的个数,所以只有当两个字符串每个字符的个数均相等时,一个字符串才是另一个字符串的排列。

记 s1​ 的长度为 n,遍历 s2​ 中的每个长度为 n的子串,判断子串和 s1​ 中每个字符的个数是否相等,若相等则说明该子串是 s1的一个排列。

使用两个数组 cnt1 和 cnt2,cnt1​ 统计 s1中各个字符的个数,cnt2​ 统计当前遍历的子串中各个字符的个数。

由于需要遍历的子串长度均为 n,我们可以使用一个固定长度为 n 的滑动窗口,滑动窗口每向右滑动一次,就多统计一次进入窗口的字符,少统计一次离开窗口的字符。然后,判断 cnt1​ 是否与 cnt2​ 相等,若相等则s1 的排列之一是 s2​ 的子串。

s1是字符数组,s1[i]-'a'是为了将a变成0,b变成1,c变成2.

cnt用于统计每个字母在s1中出现的次数。

代码:

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;

}

};

C++中++cnt1[s1[i]-‘a‘]的意思相关推荐

  1. 新生代中Eden:S1:S2为什么是8:1:1?

    新生代中的可用内存:复制算法用来担保的内存为9:1 可用内存中Eden:S1区为8:1 即新生代中Eden:S1:S2 = 8:1:1

  2. 计算机工作模式s0 s1,电源选项中S0,S1,S2,S3,S4,S5的含义.docx

    电源选项中S0,S1,S2,S3,S4,S5的含义.docx 电源选项中S0,S1,S2,S3,S4,S5的含义S0?? 实际上这就是我们平常的工作状态,所有设备全开,不多说了...S1?? 也就是S ...

  3. 电源选项中的S1,S2,S3,S4,S5

    ACPI(Advanced Configuration and PowerInterface),即高级配置与电源接口.这种新的能源管理可以通过诸如软件控制"开关"系统,亦可以用Mo ...

  4. MySQL FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配的字符串的位置

  5. python中集合的元素可以是任意数据类型_Python之基本数据类型——集合数据类型...

    集合set(可变的数据类型): 数据结构以大括号{}表示,各元素逗号隔开,例:{1,2,3,4}. 集合特征:无序,元素不重复 创建集合: s={1,2,3} pirnt(s) #---------- ...

  6. JAVA 中equals()与==的区别

    原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...

  7. CB:南土所梁玉婷组-细菌群落的高稳定性和代谢能力促进了土壤中易分解碳的快速减少...

    摘要 不可逆转的气候变化改变了土壤碳(C)的分解和固存.然而,具有不同初始有机物含量的土壤中C成分的稳定性及其与主要分解者对气候变暖的反应的关系仍不清楚.在这项研究中,我们将具有有机质(OM)梯度(2 ...

  8. 2.Java中String,StringBuilder以及StringBuffer的关系与区别

    String     StringBuffer     StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...

  9. 研究揭示大脑在工作记忆中存储信息的神经机制

    来源:中国科学院脑科学与智能技术卓越创新中心(神经科学研究所) 3月5日,<神经元>期刊在线发表了题为<无颗粒岛叶皮层瞬时性神经元活动调控学习新任务时的工作记忆存储>的研究论文 ...

  10. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

最新文章

  1. 百度之星第一题竟然没过
  2. WPC大会新动态:合作伙伴采纳Windows Azure
  3. python软件在哪里自学好_python自学教程【安装python及第一个程序】
  4. 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 有损脑健康的七种坏习惯...
  5. 机器学习笔记:梯度消失
  6. SAP以创新提升极限帆船赛
  7. 数据湖分析如何面向对象存储OSS进行优化?
  8. VMware Linux下拖拽补丁vmtools的安装和卸载
  9. php mysql书城_php在线书城 thinkphp源码(含数据库脚本)
  10. Collection和Collections的区别是什么
  11. 访问vector元素方法的效率比较(转)
  12. Botanical Dimensions:借助第九代智能英特尔® 酷睿™ 处理器实现独特沉浸式体验...
  13. 40个良好用户界面设计Tips
  14. CF1151div2(Round 553)
  15. Java 嵌入数据处理引擎:SQLite 的挑战者
  16. Java 最全面的面试题675道
  17. [C/C++]宽字符与控制台程序
  18. Keil5 编译时显示..\OBJ\TPAD.axf: error: L6002U: Could not open file ..\obj\main.o: No such file or direct
  19. docker容器化部署
  20. Photoshop---Wacom手绘板绘画画变成了拖动,根本不能画画

热门文章

  1. OSChina 周四乱弹 —— 月中发工资还没到家……
  2. 【愚公系列】2022年10月 基于WPF的智能制造MES系统框架-简介
  3. LaTeX错误“Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf.”
  4. [笔记]_ELVE_正则表达式
  5. CORS手机测试软件,司南导航RTK手簿软件测量大师连接千寻cors账号进行测量的方法教程...
  6. 如何使用计算机对文件修改密码,win7系统给共享文件夹设置密码的操作办法
  7. python曲线拟合预测_数据预测与曲线拟合
  8. 用 Web 技术为 Safari 编写扩展
  9. 病毒式传播ip_病毒式传播后网络安全实践的简单指南
  10. Data Structures and Algorithm Analysis in C, Second Edition(《数据结构与算法分析》C语言版 第二版)——Mark Allen Weiss