821. 字符的最短距离 难度 简单

本文介绍了一种算法,该算法用于计算字符串中每个字符到指定字符的最短距离,并通过两次遍历的方法实现。适用于字符串长度不大于10,000的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。

示例 1:

输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]

说明:

  1. 字符串 S 的长度范围为 [1, 10000]
  2. C 是一个单字符,且保证是字符串 S 里的字符。
  3. S 和 C 中的所有字母均为小写字母。

思路,正反两次遍历,保存最小值

func shortestToChar(S string, C byte) []int {
    // 声明保存结果的切片
    var list1 []int
    
    // range遍历出来的是rune类型,所以C要先转成int32才能比较
    c := int32(C)

    // 初始化等于C的字符的下标值
    tmp := 10001
    for k, v := range S {
        // 更新最新的等于C的下标值
        if (v==c) {
            tmp = k
        }
        // 如果下标仍为初始值,则用10001占位。否则将当前下标和C字符下表差添加进去
        if (tmp==10001){
            list1 = append(list1, 10001)
        }else{
            list1 = append(list1, k-tmp)
        }
    }
    
    // 反向来一次
    tmp1 := 10001
    length := len(S)
    for i:=0;i<length;i++{
        if S[length-i-1]==C{
            tmp1 = i
        }
        // 在有C的情况下处理
        if tmp1 != 10001{
            // 判断值是否小于当前位置的值,如果小于,则更新。
            if i-tmp1<=list1[length-i-1]{
                list1[length-i-1] = i-tmp1
            }
        }
    }
    return list1
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值