字符串距离计算----牛客算法面试题

题目描述

给定两个长度相等的,由小写字母组成的字符串S1和S2,定义S1和S2的距离为两个字符串有多少个位置上的字母不相等。

现在牛牛可以选定两个字母X1和X2,将S1中的所有字母X1均替换成X2。(X1和X2可以相同)

牛牛希望知道执行一次替换之后,两个字符串的距离最少为多少。

 

示例1

输入

复制

"aaa","bbb"

输出

复制

0

说明

牛牛可以将S1中的字符'a'全部替换成字符'b',这样S1就变成了"bbb",那么S1和S2的距离就是0

示例2

输入

复制

"aabb","cdef"

输出

复制

3

说明

一种可行的方案是将S1中的字符'a'全部替换成字符'c',那么S1变成了"ccbb",和S2的距离是3

备注:

S1.size() =S2.size()S1.size()=S2.size()

1 \leq S1.size() \leq 5 * 10^41≤S1.size()≤5∗104

S1和S2中的字母均为小写字母

解题思路:

因为输入的字符串为26个小写字母组成,主要步骤是将S1中的字符a全部换成b然后求S1与S2的"字符串距离",可以维护一个二维数组,map[i][j],其中i代表S1中的字符,j代表S2中的字符,遍历map求出由i替换成j后获取的最大价值

AC代码:

public int GetMinDistance (String S1, String S2) {
        int[][] map=new int[26][26];
        int diff=0;
        for(int i=0;i<S1.length();i++){
            int a=S1.charAt(i)-'a';
            int b=S2.charAt(i)-'a';
            map[a][b]++;
            diff+=a!=b?1:0;
        }
        int minn=Integer.MAX_VALUE;
        for(int i=0;i<26;i++){
            for(int j=0;j<26;j++){
                minn=Math.min(minn,diff+map[i][i]-map[i][j]);
            }
        }
        return minn;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值