对比两个字符串A、B的连续子串
代码块
第一层循环是循环子串的长度,然后先将该长度下的:
方法1
for (i=1;i<=len;i++) {//连续i个的子串
HashTable.clear();
mem0(a);
for (j=0;j<i;j++) a[s[j]-'a']++;//第一个连续i个的子串
for (j=0;j<lena-i;j++) {
HashTable[hash()]++;
a[s[j]-'a']--;//将第一个字母去掉
a[s[j+i]-'a']++;//加上后面那个字母后面那个
}
}
方法二:
for(int i=0;i<a.length();i++)
{
for(int j=0;j<26;j++){
sum[i+1].num[j]+=sum[i].num[j];
}
sum[i+1].num[a[i]-'a']++;
}//先把前i个都存起来,之后用来作差
for(int len=min(a.length(),b.length());len>=1;len--)
{
q.clear();
for(int i=0;i+len<=a.length();i++)
{
int j=i+len;
node x;
for(int k=0;k<26;k++)
{
x.num[k]=sum[j].num[k]-sum[i].num[k];
}
q.insert(x);
}