leetcode 821. 字符的最短距离

这篇具有很好参考价值的文章主要介绍了leetcode 821. 字符的最短距离。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 题目描述
  • 解题思路
  • 执行结果
leetcode 821. 字符的最短距离.

题目描述

  1. 字符的最短距离

给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。

返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。

两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。

示例 1:

输入:s = "loveleetcode", c = "e" 输出:[3,2,1,0,1,0,0,1,2,2,1,0] 解释:字符 'e' 出现在下标 3、5、6 和 11 处(下标从 0 开始计数)。 距下标 0 最近的 'e' 出现在下标 3 ,所以距离为 abs(0 - 3) = 3 。 距下标 1 最近的 'e' 出现在下标 3 ,所以距离为 abs(1 - 3) = 2 。 对于下标 4 ,出现在下标 3 和下标 5 处的 'e' 都离它最近,但距离是一样的 abs(4 - 3) == abs(4 - 5) = 1 。 距下标 8 最近的 'e' 出现在下标 6 ,所以距离为 abs(8 - 6) = 2 。 示例 2:

输入:s = "aaab", c = "b" 输出:[3,2,1,0]

提示: 1 <= s.length <= 104 s[i] 和 c 均为小写英文字母 题目数据保证 c 在 s 中至少出现一次

解题思路

法1

方法1:取最佳

我们来回遍历两次字符串,一次从左往右,一次从右往左,取最小的结果储存到数组中并返回数组的值

首先创建了一个与字符串 s 长度相同的整数数组 ans,用于存储每个位置到最近的字符 c 的距离。

接下来,代码使用两次遍历来计算距离。第一次遍历从左到右,维护一个变量 prev,表示最近的字符 c 的索引。如果当前位置的字符等于 c,则更新 prev 为当前索引,否则计算当前位置到 prev 的距离并存储到 ans 数组中。

第二次遍历从右到左,同样维护一个变量 prev,表示最近的字符 c 的索引。如果当前位置的字符等于 c,则更新 prev 为当前索引,然后计算当前位置到 prev 的距离,并与第一次遍历得到的距离比较,取较小值存储到 ans 数组中。

最后,返回计算得到的 ans 数组作为结果。

  • 时间复杂度(O(n))
  • 空间复杂度(O(1))

执行结果

法1
func shortestToChar(s string, c byte) []int {
    n := len(s)
    ans := make([]int, n)

    prev := -n
    for i := 0; i < n; i++ {
        if s[i] == c {
            prev = i
        }
        ans[i] = i - prev
    }

    prev = 2 * n
    for i := n-1; i >= 0; i-- {
        if s[i] == c {
            prev = i
        }
        ans[i] = min(ans[i], prev - i)
    }

    return ans
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 2.2 MB , 在所有 Go 提交中击败了 100.00% 的用户 通过测试用例: 76 / 76 炫耀一下:


本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-446255.html

到了这里,关于leetcode 821. 字符的最短距离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 不同整数的最少数目和单词直接最短距离

    写是为了更好的思考,坚持写作,力争更好的思考。 今天分享两个关于“最小、最短”的算法题,废话少说,show me your code! 给你一个整数数组arr和一个整数k。现需要从数组中恰好移除k个元素,请找出移除后数组中不同整数的最少数目? 输入: arr=[5,4,5],k=1 输出:1 解释:

    2024年01月18日
    浏览(72)
  • GEE机器学习——利用最短距离方法进行土地分类和精度评定

    最短距离方法(Minimum Distance)是一种常用的模式识别算法,用于计算样本之间的相似度或距离。该方法通过计算样本之间的欧氏距离或其他距离度量,来确定样本之间的相似程度或差异程度。 最短距离方法的具体步骤如下: 1. 数据准备:收集并准备用于训练的数据集,确保

    2024年01月20日
    浏览(53)
  • 2023河南萌新联赛第(二)场:河南工业大学 F - 最短距离

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵包含 n n n 个顶点的树 T T T ,以及 m m m 个查询请求。每个查询包含三个参数 : x 、 y :x、y : x 、 y 和 k k k 。其中 x x x 和 y y y 是树中的两个顶点, k k k 是一个整数。对于

    2024年02月15日
    浏览(41)
  • 最短路径-任意两点间最短距离-Floyd算法的matlab实现(详细教程)

    目录 简介 核心思路 优缺点分析 算法过程          示例 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德

    2024年02月05日
    浏览(41)
  • LeetCode竞赛题目—在LR字符串中交换相邻字符

    作者: 渴望力量的土狗 博客主页:渴望力量的土狗的博客主页 专栏:每日一道LeetCode 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网 点击免费注册和我一起刷题吧 目录 题目描述:在LR字符串中交换相邻字符 解答思路:双指针法 分析: Java解题

    2024年01月21日
    浏览(52)
  • LeetCode | C++ 动态规划——583. 两个字符串的删除操作、72. 编辑距离

    583题目链接 做法一: 本题和1143.最长公共子序列基本相同,只要求出两个字符串的最长公共子序列长度即可,那么除了最长公共子序列之外的字符都是必须删除的,最后用两个字符串的总长度减去两个最长公共子序列的长度就是删除的最少步数。 做法二: 本题和115.不同的子

    2024年02月16日
    浏览(49)
  • 小白水平理解面试经典题目LeetCode 594 最大和谐字符串

    这道题属于字符串类型题目,解决的办法还是有很多的,暴力算法,二分法,双指针等等。 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个

    2024年01月23日
    浏览(47)
  • LeetCode 1641. 统计字典序元音字符串的数目 / 1637. 两点之间不包含任何点的最宽垂直区域 / 1053. 交换一次的先前排列

    2023.3.29 每日一题 给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。 字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。 示例 1: 输入:n = 1 输出:5 解释:仅由元音组成

    2023年04月09日
    浏览(40)
  • matlab算法模型——图的最短路径和距离

    目录 一、前言 二、最短路径 1.sqarse创建稀疏矩阵 ​​2.有向图的最短路径         使用graphallshortestpaths函数 使用dijkstra.ma函数(直接引用) 3.无向图的最短路径 使用函数graphallshortestpaths(2021的版本不能用了) 使用shortestpath函数 三、未解决的问题 动态规划——求解某类问题

    2024年02月04日
    浏览(33)
  • 【LeetCode题目详解】1281题 整数的各位积和之差 面试题 01.01. 判定字符是否唯一 python题解(作业一二)

    问题描述: 1281. 整数的各位积和之差 给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例 1: 输入:n = 234 输出:15 解释: 各位数之积 = 2 * 3 * 4 = 24 各位数之和 = 2 + 3 + 4 = 9 结果 = 24 - 9 = 15 示例 2: 输入:n = 4421 输出:21 解释:

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包