字符串计数, 美团笔试题

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            char[] s1 = sc.next().toCharArray();
            char[] s2 = sc.next().toCharArray();
            int len1 = sc.nextInt(), len2 = sc.nextInt(), mod = 1000007;
            int[] f = new int[len2+1];
            int res = 0;
            for(int i=1; i <= len2; i++) {
                f[i] = (26*f[i-1]) % mod;
                if(i <= s1.length) f[i] = (f[i] + mod - s1[i-1]) % mod;
                if(i <= s2.length) f[i] = (f[i] + s2[i-1]) % mod;
                if(i == s2.length) f[i] = (f[i] + mod - 1) % mod;
                if(i >= len1) res = (res + f[i]) % mod;
            }
            System.out.println(res);
        }
    }
}
/*
f[i]表示长度为i 在s1和s2之间的字符串的数量。
f[i] = 26* f[i-1] -s1[i-1] + s2[i-1]
*/

原文地址:https://www.cnblogs.com/lixyuan/p/13221075.html