给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 来源:力扣
1.首先发现大错
没看懂题目,直接就上了。

但我给想成那啥一定要按顺序排列了,然后。。。。

2.修改问题
比如字符串1"abc",那么字符串2中包含有abc随机组成的字串都是可以的比如,abc,acb,bac,bca,cab,cba这些都是可以算作组成。只要字符串2中包含有这6中组成中的一种即可返回true
源代码如下
bool checkInclusion(char* s1, char* s2)
{
int n = strlen(s1), m = strlen(s2);//n,m分别对应1,2的长度
if (n > m)
{//如果字符串1大于字符串2的长度直接返回false
return false;
}
int cnt[26];//建立小写字母数组
memset(cnt, 0, sizeof(cnt));//为每个字母对应的数组空位置0
for (int i = 0; i < n; ++i)
{
--cnt[s1[i] - 'a'];//将字符串1内的字符进行统计(按负数统计)
}
int left = 0;
for (int right = 0; right < m; ++right)
{
int x = s2[right] - 'a';//获取right对应字母在cnt中的位置
++cnt[x];//计数加一
while (cnt[x] > 0)
{ //当所计数的字母数在字符串2内的数目大于字符串1内的数目
--cnt[s2[left] - 'a']; //left对应字母在cnt中计数减1
++left; //left右移
}
if (right - left + 1 == n)
{ //若左右指针间长度等于s1的长度
return true; //返回true
}
}
return false;
}
相关推荐
Python实现判断一个字符串是否包含子串的方法总结
主要介绍了Python实现判断一个字符串是否包含子串的方法,结合实例形式总结分析了四种比较常用的字符串子串判定方法,需要的朋友可以参考下
js判断一个字符串是否包含一个子串的方法
主要介绍了js判断一个字符串是否包含一个子串的方法,实例分析了判断的技巧与第三方脚本的使用方法,需要的朋友可以参考下
python简单算法04:判断一个字符串是否为回文串的排列之一
问题简介 解答 问题简介 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语,排列是指字母重新排列,回文串不一定是字典中的单词。 例如: 输入:“tactcoa” 输出:True(排列有“tacocat”、”atcocta”等等) 解答 思路: 所有字符中,统计每个字符出现的次数,最多只有一个字符的统计次数是奇数,剩下的必须都是偶数。即奇数只能为1或0个,例如acca,accbcca等 from collections import Counter def palindromic(s): #统计所有字符出现的次数 num=l
java实现字符串匹配求两个字符串的最大公共子串
主要介绍了java实现求两个字符串最大公共子串的方法,详细的描述了两个字符串的最大公共子串算法的实现,需要的朋友可以参考下
在一个字符串中查找子串的个数
在一个字符串s中查找有几个字串subs,结果返回字串的个数。主要用的indexOf()函数。


