244 最短单词距离 II

题目描述:
请设计一个类,使该类的构造函数能够接收一个单词列表。然后再实现一个方法,该方法能够分别接收两个单词 word1 和 word2,并返回列表中这两个单词之间的最短距离。您的方法将被以不同的参数调用 多次。

示例:
假设 words = [“practice”, “makes”, “perfect”, “coding”, “makes”]
输入: word1 = “coding”, word2 = “practice”
输出: 3
输入: word1 = “makes”, word2 = “coding”
输出: 1

注意:
你可以假设 word1 不等于 word2, 并且 word1 和 word2 都在列表里。

方法1:
主要思路:
(1)将输入的字典使用unordered_map来统计字符串对应的各个索引,然后在找路径的时候,从对应的两个字符串的索引数组中,找出可能的最小距离;

class WordDistance {
public:
    unordered_map<string,vector<int>> mp;
    WordDistance(vector<string>& words) {
        for(int i=0;i<words.size();++i){//建立映射
            mp[words[i]].push_back(i);
        }
    }
    
    int shortest(string word1, string word2) {
    	//找出对应的索引位置
        vector<int>& word1_vec=mp[word1];
        vector<int>& word2_vec=mp[word2];
        int res=INT_MAX;
        //找出最小的距离
        for(int i=0;i<word1_vec.size();++i){
            for(int j=0;j<word2_vec.size();++j){
                res=min(res,abs(word1_vec[i]-word2_vec[j]));
            }
        }
        return res;
    }
};

/**
 * Your WordDistance object will be instantiated and called as such:
 * WordDistance* obj = new WordDistance(words);
 * int param_1 = obj->shortest(word1,word2);
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值