博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] 245. Shortest Word Distance III 最短单词距离 III
阅读量:4494 次
发布时间:2019-06-08

本文共 2862 字,大约阅读时间需要 9 分钟。

This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as word2.

Given a list of words and two words word1 and word2, return the shortest distance between these two words in the list.

word1 and word2 may be the same and they represent two individual words in the list.

For example,

Assume that words = ["practice", "makes", "perfect", "coding", "makes"].

Given word1 = “makes”, word2 = “coding”, return 1.

Given word1 = "makes", word2 = "makes", return 3.

Note:

You may assume word1 and word2 are both in the list.

 和  的拓展,这次两个单词可能会相同。

Python:

# Time:  O(n)# Space: O(1)class Solution:    # @param {string[]} words    # @param {string} word1    # @param {string} word2    # @return {integer}    def shortestWordDistance(self, words, word1, word2):        dist = float("inf")        is_same = (word1 == word2)        i, index1, index2 = 0, None, None        while i < len(words):            if words[i] == word1:                if is_same and index1 is not None:                    dist = min(dist, abs(index1 - i))                index1 = i            elif words[i] == word2:                index2 = i            if index1 is not None and index2 is not None:                dist = min(dist, abs(index1 - index2))            i += 1        return dist

  

C++:

class Solution {public:    int shortestWordDistance(vector
& words, string word1, string word2) { int p1 = -1, p2 = -1, res = INT_MAX; for (int i = 0; i < words.size(); ++i) { int t = p1; if (words[i] == word1) p1 = i; if (words[i] == word2) p2 = i; if (p1 != -1 && p2 != -1) { if (word1 == word2 && t != -1 && t != p1) { res = min(res, abs(t - p1)); } else if (p1 != p2) { res = min(res, abs(p1 - p2)); } } } return res; }};

C++:

class Solution {public:    int shortestWordDistance(vector
& words, string word1, string word2) { int p1 = words.size(), p2 = -words.size(), res = INT_MAX; for (int i = 0; i < words.size(); ++i) { if (words[i] == word1) p1 = word1 == word2 ? p2 : i; if (words[i] == word2) p2 = i; res = min(res, abs(p1 - p2)); } return res; }};

C++:  

class Solution {public:    int shortestWordDistance(vector
& words, string word1, string word2) { int idx = -1, res = INT_MAX; for (int i = 0; i < words.size(); ++i) { if (words[i] == word1 || words[i] == word2) { if (idx != -1 && (word1 == word2 || words[i] != words[idx])) { res = min(res, i - idx); } idx = i; } } return res; }};

  

  

 

 

 

类似题目:

 

 

转载于:https://www.cnblogs.com/lightwindy/p/9736293.html

你可能感兴趣的文章
渲染流程替换
查看>>
array_multisort 函数的使用
查看>>
Myslq 之创建数据库
查看>>
C++关于日期代码
查看>>
单链表范例
查看>>
前端网址导航-最酷前端圈子在这里
查看>>
SVN、GIT比较
查看>>
asp后台读id设置样式
查看>>
设计模式(总)
查看>>
求1+2+3+...+n的值
查看>>
毛玻璃背景效果
查看>>
每天一个linux命令(26)--用SecureCRT来上传和下载文件
查看>>
心态回归
查看>>
VS2005编译GEOS GDAL
查看>>
TortoiseGit连接github不用每次输入用户名和密码的方法
查看>>
vim(gvim)相关插件整理
查看>>
使用alembic进行数据库版本管理
查看>>
hdfs集群(hadoop_03)
查看>>
奇虎360安全牛人全球挑战赛无线部…
查看>>
Uploadify V3.2.1 上传文件报404 Not Found问题解决
查看>>