字符的最短距离 Go语言

11 篇文章 0 订阅
6 篇文章 0 订阅
这篇博客讨论了一种字符串处理问题,即求字符串中每个字符到最近出现的特定字符的最短距离。提供了两种双指针解决方案:一种是正向扫描并维护当前位置的最短距离;另一种是先正向扫描,再反向扫描以优化结果。这些算法适用于高效地处理字符串数据,尤其在需要频繁查找最近出现的特定字符的场景下。
摘要由CSDN通过智能技术生成
字符的最短距离
  • 题目:给你一个字符串 s s s 和一个字符 c c c ,且 c c c s s s 中出现过的字符。

  • 返回一个整数数组 a n s w e r answer answer ,其中 answer.length == s.lengthanswer[i] s s s 中从下标 i 到离它最近的字符 c c c 的距离 。

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

// 双指针法,记录每次字符 c 出现的位置和上一次出现的位置,同时每次更新最近距离数组
func shortestToChar1(s string, c byte) []int {
	arr := make([]int, len(s))
	for i, previous := 0, -1; i < len(s); i++ {
		if s[i] == c {
			if previous == -1 {
				for j := i; j >= 0; j-- {
					arr[j] = i - j
				}
			} else {
				for j := i; j > (i+previous-1)/2; j-- {
					arr[j] = i - j
				}
			}
			previous = i
		} else {
			arr[i] = i - previous
		}
	}
	return arr
}
// 正反遍历,对比任意字符距离左右字符 c 的最短距离同时更新最短距离数组
func shortestToChar(s string, c byte) []int {
	arr := make([]int, len(s))
	for i, previous := 0, -1; i < len(s); i++ {
		arr[i] = -1
		if s[i] == c {
			arr[i] = 0
			previous = i
		} else {
			arr[i] = i - previous
		}
	}
	for i, previous := len(s)-1, -1; i >= 0; i-- {
		if s[i] == c {
			previous = i
		} else if temp := previous - 1; temp < arr[i] {
			arr[i] = temp
		}
	}
	return arr
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值