6269. 到目标字符串的最短距离

50 阅读1分钟

题目:
给你一个下标从 0 开始的 环形 字符串数组 words 和一个字符串 target 。环形数组 意味着数组首尾相连。

  • 形式上, words[i] 的下一个元素是 words[(i + 1) % n] ,而 words[i] 的前一个元素是 words[(i - 1 + n) % n] ,其中 n 是 words 的长度。

从 startIndex 开始,你一次可以用 1 步移动到下一个或者前一个单词。

返回到达目标字符串 target 所需的最短距离。如果 words 中不存在字符串 target ,返回 -1 。
算法:
方法一:左右双向遍历

func closetTarget(words []string, target string, startIndex int) int {
    n := len(words)
    //     向右查找,找到target的位置
    right := 0
    for i := startIndex; right < n && words[i] != target; i = (i + 1) % n {
        right ++
    }
    //     向左查找,找到target的位置
    if right == n {
        return - 1
    }
    left := 0
    for i := startIndex; left < n &&  words[i] != target; i = (i - 1 + n) % n {
        left ++
    }
    if left > right {
        return right
    }
    return left
}