现在的位置: 首页 > 综合 > 正文

Pattern and Text

2012年02月23日 ⁄ 综合 ⁄ 共 467字 ⁄ 字号 评论关闭

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

朴素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);           
 }
        
}

抱歉!评论已关闭.