2515. Shortest Distance to Target String in a Circular Array

Difficulty:
Related Topics:
Similar Questions:

Problem

You are given a 0-indexed circular string array words and a string target. A circular array means that the array's end connects to the array's beginning.

Starting from startIndex, you can move to either the next word or the previous word with 1 step at a time.

Return **the *shortest* distance needed to reach the string** target. If the string target does not exist in words, return -1.

  Example 1:

Input: words = ["hello","i","am","leetcode","hello"], target = "hello", startIndex = 1
Output: 1
Explanation: We start from index 1 and can reach "hello" by
- moving 3 units to the right to reach index 4.
- moving 2 units to the left to reach index 4.
- moving 4 units to the right to reach index 0.
- moving 1 unit to the left to reach index 0.
The shortest distance to reach "hello" is 1.

Example 2:

Input: words = ["a","b","leetcode"], target = "leetcode", startIndex = 0
Output: 1
Explanation: We start from index 0 and can reach "leetcode" by
- moving 2 units to the right to reach index 3.
- moving 1 unit to the left to reach index 3.
The shortest distance to reach "leetcode" is 1.

Example 3:

Input: words = ["i","eat","leetcode"], target = "ate", startIndex = 0
Output: -1
Explanation: Since "ate" does not exist in words, we return -1.

  Constraints:

Solution (Java)

class Solution {
    public int closetTarget(String[] words, String target, int startIndex) {
        int n = words.length;
        int ans = 10001, t = 0;
        for (int i = 0; i < n; i++) {
            if (words[i].equals(target)) {
                int val = Math.abs(i - startIndex);
                t = 0;
                if (i > startIndex) {
                    t = startIndex + n - i;
                } else {
                    t = i + n - startIndex;
                }
                ans = Math.min(t, Math.min(val, ans));
            }
        }
        return ans == 10001 ? -1 : ans;
    }
}

Explain:

nope.

Complexity: