题解 | #字符串距离计算#

字符串距离计算

https://www.nowcoder.com/practice/82bd533cd9c34df29ba15bbf1591bedf

#include <algorithm>
#include <cassert>
#include <memory>
#include <vector>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算最少的距离
     * @param S1 string字符串 第一个字符串
     * @param S2 string字符串 第二个字符串
     * @return int整型
     */
    int GetMinDistance(string S1, string S2) {
        assert(S1.size() == S2.size());
        // 小写字母数量比较少,因此直接遍历26*26空间,少遍历整个字符串
        vector<vector<int>> mat(26, vector<int>(26,
                                                0)); //保存把某个字母换成某个字母的距离
        for (int i = 0; i < S1.size(); i++) { //尽量只遍历一次字符串
            for (int j = 0; j < 26; j++) {
                for (int k = 0; k < 26; k++) {
                    mat[j][k]++;
                    if (S1[i] - 'a' == j && S2[i] - 'a' == k) {
                        mat[j][k]--;
                    }else if (S1[i]==S2[i] && S1[i] - 'a' != j) {
                        mat[j][k]--;
                    }
                }
            }
        }
        int minDist = mat[0][0];
        for (vector<int> row : mat) {
            for (int item : row) {
                minDist = min(minDist, item);
            }
        }
        return minDist;
    }
};

因为小写字母很少,直接计算所有字符串的距离。mat[j][k]表示S1'和S2的距离,其中S1'为S1中j号小写字母变为k号小写字母得到的字符串。每一轮,除非j改为k之后对应字符串相同,或者没发生交换本来相同,否则都要距离++。

全部评论

相关推荐

09-28 09:18
吉首大学 Java
离上岸不远了的牛油很...:同27,你写的专业技能那些是真熟练了吗,我感觉稍微问深一点我都要🐔
你找实习最大的坎坷是什么
点赞 评论 收藏
分享
karis_aqa:和hr没关系,都是打工的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务