牛客网真题-90-字符串距离

字符串距离

http://www.nowcoder.com/questionTerminal/c0ccc2e437f0473e8e5ebb7703c24089

双层for会超时 正确思路为扫描法
两种扫描方式,s1中字符扫描s2, s2的字符扫描s1,一般选择用小的扫描大的。然后用前缀和数组存储a的数量
对于s2的第i个元素 扫描是s1的坐标是【i,len(s1)-len(s2)+i】

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        long cnt = 0;
        int[] numA = new int[s1.length()];
        for(int i = 0; i < s1.length(); i++){
            numA[i] = (i - 1 >= 0 ? numA[i - 1] : 0) + (s1.charAt(i) == 'a' ? 1 : 0);
        }
//        System.out.println(Arrays.toString(numA));
        for(int i = 0; i < s2.length(); i++){
            //从i到r中a的数量
            int r = s1.length() - s2.length() + i;
            int a = numA[r] - (i - 1 >= 0 ? numA[i - 1] : 0);
            if(s2.charAt(i) == 'b'){
                cnt += a;
            }else{
                int b = r - i + 1 - a;//字符总数减去a的数量
                cnt += b;
            }
        }
        System.out.println(cnt);
    }
}

全部评论

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
某牛奶:一觉醒来全球程序员能力下降200%,小伙成功scanf惊呆在座个人。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务