题目:
给你一个下标从 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
}