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

字符串距离计算

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之后对应字符串相同,或者没发生交换本来相同,否则都要距离++。

全部评论

相关推荐

节后就六月了,六月找暑期实习还有戏吗?
佛系的芝士不放弃:不要急嘛,如果你能接受8月底或者9月初再投简历的话,都不要急,6月底会放一批实习出来,然后7月初再出去实习,因为这个时间段很大佬已经实习完准备回校准备秋招了,一堆实习空缺岗。
点赞 评论 收藏
分享
庸也君:简历粗略看,有可能会被paas,如果详细地看的话,简历写的很优秀,很规范,部分内容也有量化
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务