剑指 Offer II 014. 字符串中的变位词
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
示例 1:
输入: s1 = “ab” s2 = “eidbaooo”
输出: True
解释: s2 包含 s1 的排列之一 (“ba”).
示例 2:
输入: s1= “ab” s2 = “eidboaoo”
输出: False
我下面这个代码可以优化的,做一些小改动就可以极大提高时间时间效率
bool checkInclusion(char * s1, char * s2){
int r[26];
int r2[26];
for(int i=0;i<26;i++){
r[i]=0;
}
for(int i=0;s1[i]!='\0';i++){
r[s1[i]-'a']++;
}
int co=strlen(s1);
// printf("%d ",co);
for(int j=0;s2[j]!='\0';){
for(int i=0;i<26;i++){
r2[i]=r[i];
}
int st=co;
for(int k=j;s2[k]!='\0';k++){
if( r2[s2[k]-'a']>0){
r2[s2[k]-'a']--;
st--;
}
else{
break;
}
if(st==0){
return true;
}
}
j++;
}
return false;
}