Pattern and Text

又是一道优化时间复杂度的算法。

朴素O(N * N) ( N <= 2000000)
可以优化成O(N)的时间复杂度

View Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;

char word[2001000], str[2000100];
int num[2001000];

int main( )
{
 int N;
 scanf("%d",&N);
 while( N-- )
 {
    scanf("%s%s",str,word);
    int len1 = strlen(word);
    int len2 = strlen(str);
    long long sum = 0;
    for( int i = 0; i < len1; i++)
    {
       if( i < len2 )
           num[str[i]-'a']++;
       sum += (long long) num[word[i]-'a'];
       if( len2 + i - len1 >= 0 )
           num[str[len2+i-len1] -'a']--;
         
    }
    printf("%I64d\n",sum);           
 }
        
}

posted on 2012-07-30 16:41  more think, more gains  阅读(176)  评论(0编辑  收藏  举报

导航