当前位置: 首页 > article >正文

【C++刷题】力扣-#243-最短单词距离

题目描述

给定一个单词列表 words 和两个单词 word1 和 word2,返回这两个单词在列表中的最短距离。如果 word1 和 word2 是同一个单词,则返回它与自身的最近距离。

示例

示例 1:

输入: words = ["practice", "makes", "perfect", "coding", "makes"], word1 = "makes", word2 = "coding"
输出: 1

示例 2:

输入: words = ["practice", "makes", "perfect", "makes"], word1 = "makes", word2 = "makes"
输出: 2

题解

这个问题可以通过遍历数组并跟踪 word1 和 word2 的最近出现位置来解决。

  1. 初始化:创建两个变量 index1 和 index2 来存储 word1 和 word2 的索引,并将它们初始化为 -1。同时,创建一个变量 minDistance 来存储最小距离,并将其初始化为 ∞。
  2. 遍历数组:遍历单词列表 words。
    ○ 如果当前单词等于 word1,则更新 index1 为当前索引,并更新 minDistance 为 index1 和 index2 之间的距离。
    ○ 如果当前单词等于 word2,则更新 index2 为当前索引,并更新 minDistance 为 index1 和 index2 之间的距离。
    ○ 每次更新 minDistance 时,使用 min(minDistance, abs(index1 - index2)) 来确保它是最小的。
  3. 返回结果:遍历结束后,返回 minDistance。

代码实现

int shortestDistance(vector<string>& words, string word1, string word2) {
    int index1 = -1, index2 = -1;
    int minDistance = INT_MAX;
    for (int i = 0; i < words.size(); i++) {
        if (words[i] == word1) {
            index1 = i;
            if (index2 != -1) {
                minDistance = min(minDistance, abs(index1 - index2));
            }
        }
        if (words[i] == word2) {
            index2 = i;
            if (index1 != -1) {
                minDistance = min(minDistance, abs(index1 - index2));
            }
        }
    }
    return minDistance;
}

复杂度分析

● 时间复杂度:O(n),其中 n 是单词列表 words 的长度。我们需要遍历一次列表。
● 空间复杂度:O(1),因为我们只使用了常数个额外变量。
这个算法的优势在于它只需要一次遍历即可找到最短单词距离,且不需要额外的存储空间。


http://www.kler.cn/news/361102.html

相关文章:

  • 期权懂|想交易科创板ETF期权需要开户账号吗?
  • 【C++ 算法进阶】算法提升三
  • Zookeeper面试整理-Zookeeper的基础概念
  • AWK不再难:案例驱动学习,让你成为数据处理高手!
  • Mamba学习笔记(3)—S4原理基础
  • Java学习Day50:唤醒八戒(Excel相关)
  • 算法-利用深度优先搜索求解二叉树路径问题
  • 服务器中使用wss协议连接websocket(基于netty)
  • Elasticsearch高级搜索技术-基于时间的数据处理
  • DS几大常见排序讲解和实现(中)(14)
  • 一起搭WPF框架之加载图片
  • 宝塔安装ffmpeg的方法
  • 浅谈计算机存储体系和CPU缓存命中
  • 【科普】边缘计算和云计算及边缘AI应用
  • linx yum镜像源变阿里云库下载及docker的学习
  • Pandas | statas | 统计学中Levene检验和双样本t检验的使用
  • MySQL 中的数据排序是怎么实现的
  • ROM修改进阶教程------修改框架framework.apk来实现系统中某些功能开启与关闭 完整选项含义与修改事宜
  • [Gtk] 工程
  • 集合相关:asList()和subList()方法的作用?