#include<stdio.h> using namespace std; int main(){ char s[]={'t','b','c','a','c','b','d','a','t','a'}; char t[]={'a','b','c','d'}; int s_len=10,t_len=4; int res; if(s_len<t_len){ res=-1; printf("%d",res); return 0; } //申请一个散列表,记录窗口中元素的情况 int hash[26]={0}; for(int i=0;i<t_len;++i){ ++hash[t[i]-'a']; } int l=0,count=0; for(int r=0;r<s_len;++r){ --hash[s[r]-'a']; if(hash[s[r]-'a']>=0){ //s[r]处的字符在t中 ++count; } //向右移动左指针 if(r>t_len-1) { ++hash[s[l]-'a']; if (hash[s[l]-'a']>0) --count; ++l; } if(count==t_len && r-l+1==t_len){ res=l; printf("%d",res); return 0; } } res=-1;//没有找到 printf("%d",res); return 0; }