• 美团2018春招编程题第一题 字符串距离 O(n)解法


    
    
    题目描述:输入两个字符串m,n,字符串仅由'a','b'两种字符组成,且m长度len1大于等于n的长度len2,那么m有len1-len2+1个长度为len2的子串,
    将这些子串与n进行比较,将字符串距离定义为:相同位置的元素不同则距离加1,如aab与bba的距离为3

    求距离之和


    输入:
    aabaa
    bba
    输出:
    5


    思路:n中的每个字母都要比较len1-len2+1次,如b 需要和 aab比较,b需要和aba比较,a需要和baa比较。
    b与aab: 比较结果为1+1+0 = 2
    b与aba:比较结果为1+0+1 = 2
    a与baa:比较结果为1+0+0 = 1

    n中的字母进行比较时,可以利用到上一个字母比较的结果来简化步骤






    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            String str1 = in.nextLine();
            String str2 = in.nextLine();
            char[] chars1 = str1.toCharArray();
            char[] chars2 = str2.toCharArray();
            int count = 0;//最后要输出的字符串距离
            int temp = 0;
            for(int j=0;j<str1.length()-str2.length()+1;j++) {//把n中第一个字母比较的结果记录下来
                if(chars1[j] != chars2[0]) {
                    temp++;
                }
            }
            count = count + temp;
            for(int i=1;i<str2.length();i++) {//从n的第二个字母开始,利用前一个字母比较的结果
                if(chars2[i] == chars2[i-1]) {//如果该字母和前一个字母相同
                    if(chars2[i-1] != chars1[i-1]) {
                        temp--;
                    }
                    if(chars2[i] != chars1[i+str1.length()-str2.length()]) {
                        temp++;
                    }
                }else {//如果字母和前一个字母不同
                    if(chars2[i-1] != chars1[i-1]) {
                        temp--;
                    }
                    temp = str1.length()-str2.length() - temp;
                    if(chars2[i] != chars1[i+str1.length()-str2.length()]) {
                        temp++;
                    }
                }
                count = count + temp;
            }
            System.out.println(count);
        }
    }
  • 相关阅读:
    会计基础-资本与资本公积核算
    FORM 基本控件2
    EBS form的一些知识
    EBS功能安全性基本原理
    主物料界面数据来源
    organization --form 表单中organization 数据来源
    form 相关
    jar/war/ear文件的区别
    ORACLE判别字段是否包含中文
    亲测可用:SecureCRT 7 注册码/序列号
  • 原文地址:https://www.cnblogs.com/whu-gbf/p/8627208.html
Copyright © 2020-2023  润新知