class Solution {
public:
int closetTarget(vector<string>& words, string target, int startIndex) {
}
};
2515. 到目标字符串的最短距离
给你一个下标从 0 开始的 环形 字符串数组 words
和一个字符串 target
。环形数组 意味着数组首尾相连。
words[i]
的下一个元素是 words[(i + 1) % n]
,而 words[i]
的前一个元素是 words[(i - 1 + n) % n]
,其中 n
是 words
的长度。从 startIndex
开始,你一次可以用 1
步移动到下一个或者前一个单词。
返回到达目标字符串 target
所需的最短距离。如果 words
中不存在字符串 target
,返回 -1
。
示例 1:
输入:words = ["hello","i","am","leetcode","hello"], target = "hello", startIndex = 1 输出:1 解释:从下标 1 开始,可以经由以下步骤到达 "hello" : - 向右移动 3 个单位,到达下标 4 。 - 向左移动 2 个单位,到达下标 4 。 - 向右移动 4 个单位,到达下标 0 。 - 向左移动 1 个单位,到达下标 0 。 到达 "hello" 的最短距离是 1 。
示例 2:
输入:words = ["a","b","leetcode"], target = "leetcode", startIndex = 0 输出:1 解释:从下标 0 开始,可以经由以下步骤到达 "leetcode" : - 向右移动 2 个单位,到达下标 3 。 - 向左移动 1 个单位,到达下标 3 。 到达 "leetcode" 的最短距离是 1 。
示例 3:
输入:words = ["i","eat","leetcode"], target = "ate", startIndex = 0 输出:-1 解释:因为 words 中不存在字符串 "ate" ,所以返回 -1 。
提示:
1 <= words.length <= 100
1 <= words[i].length <= 100
words[i]
和 target
仅由小写英文字母组成0 <= startIndex < words.length
原站题解
python3 解法, 执行用时: 40 ms, 内存消耗: 15.1 MB, 提交时间: 2023-01-03 11:26:55
class Solution: def closetTarget(self, words: List[str], target: str, startIndex: int) -> int: n = len(words) res = n for i, word in enumerate(words): if word == target: t1 = abs(startIndex - i) t2 = n - t1 res = min(res, t1, t2) return -1 if res == n else res
golang 解法, 执行用时: 8 ms, 内存消耗: 6.1 MB, 提交时间: 2023-01-03 11:25:52
func closetTarget(words []string, target string, startIndex int) int { n := len(words) ans := n for i, s := range words { if s == target { ans = min(ans, min(abs(i-startIndex), n-abs(i-startIndex))) } } if ans == n { return -1 } return ans } func min(a, b int) int { if a > b { return b } return a } func abs(x int) int { if x < 0 { return -x } return x }
python3 解法, 执行用时: 40 ms, 内存消耗: 15.1 MB, 提交时间: 2023-01-03 11:25:28
class Solution: def closetTarget(self, words: List[str], target: str, startIndex: int) -> int: ans = n = len(words) for i, w in enumerate(words): if w == target: ans = min(ans, abs(i - startIndex), n - abs(i - startIndex)) return ans if ans < n else -1