标签:
给定两个串a和b,问b是否是a的子串的变位词,例如输入a=hello,b=lel,lle,ello都是true,但b=elo是false。(字串是连续的)
新窗口 a[i-lenb+1…i],旧窗口 a[i-lenb…i-1]
扔掉a[i-lenb],加入a[i],具体操作参考代码,文字表达不清。
#include <iostream> #include <vector> using namespace std; #define NUM 26 bool variable_bit_word(char *a,int lena,char *b,int lenb){ vector<int> cnt(26,0); int nonZero=0; // statistic of b for(int i=0;i<lenb;i++){ if(++cnt[b[i]-‘a‘]==1) nonZero++; } // first slide window for(int i=0;i<lenb;i++){ int c=a[i]-‘a‘; --cnt[c]; if(cnt[c]==0) nonZero--; if(cnt[c]==-1) nonZero++; } if(nonZero==0) return true; for(int i=lenb;i<lena;i++){ int c=a[i-lenb]-‘a‘; ++cnt[c]; if(cnt[c]==1) nonZero++; if(cnt[c]==0) nonZero--; c=a[i]-‘a‘; --cnt[c]; if(cnt[c]==0) nonZero--; if(cnt[c]==-1) nonZero++; if(nonZero==0) return true; } return false; } int main() { char a[]="hello"; char b[]="lel"; int lena=sizeof(a)/sizeof(a[0])-1; int lenb=sizeof(b)/sizeof(b[0])-1; cout<<variable_bit_word(a,lena,b,lenb)<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/AndyJee/p/4470659.html