给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 来源:力扣

陶陶ᝰꫛꫀꪝ 陶陶ᝰꫛꫀꪝ 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

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实现判断一个字符串是否包含子串的方法,结合实例形式总结分析了四种比较常用的字符串子串判定方法,需要的朋友可以参考下

weixin_38654915

js判断一个字符串是否包含一个子串的方法

主要介绍了js判断一个字符串是否包含一个子串的方法,实例分析了判断的技巧与第三方脚本的使用方法,需要的朋友可以参考下

weixin_38663608

python简单算法04:判断一个字符串是否为回文串的排列之一

问题简介 解答 问题简介 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语,排列是指字母重新排列,回文串不一定是字典中的单词。 例如: 输入:“tactcoa” 输出:True(排列有“tacocat”、”atcocta”等等) 解答 思路: 所有字符中,统计每个字符出现的次数,最多只有一个字符的统计次数是奇数,剩下的必须都是偶数。即奇数只能为1或0个,例如acca,accbcca等 from collections import Counter def palindromic(s): #统计所有字符出现的次数 num=l

weixin_38740397

java实现字符串匹配求两个字符串的最大公共子串

主要介绍了java实现求两个字符串最大公共子串的方法,详细的描述了两个字符串的最大公共子串算法的实现,需要的朋友可以参考下

weixin_38695452

在一个字符串中查找子串的个数

在一个字符串s中查找有几个字串subs,结果返回字串的个数。主要用的indexOf()函数。

iloveabcyou
评论
收藏 已收藏
分享
返回顶部