821. Shortest Distance to a Character

https://leetcode.com/problems/shortest-distance-to-a-character/

Given a string S and a character C, return an array of integers representing the shortest distance from the character C in the string.
Example 1:
Input: S = "loveleetcode", C = 'e'
Output: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]

Note:
  1. S string length is in [1, 10000].
  2. C is a single character, and guaranteed to be in string S.
  3. All letters in S and C are lowercase.
----
class Solution {
public int[] shortestToChar(String S, char C) {
int[] ans = new int[S.length()];
List<Integer> matches = new ArrayList<Integer>();
for (int i = 0; i < S.length(); i++) {
if (S.charAt(i) == C) {
matches.add(i);
}
}
int j = 0;
for (int i = 0; i < S.length(); i++) {
if (j < matches.size() && matches.get(j) == i) {
ans[i] = 0;
j++;
}
if (j == 0) {
ans[i] = matches.get(j) - i;
} else if (j < matches.size()) {
ans[i] = Math.min(i - matches.get(j - 1), matches.get(j) - i);
} else if (j == matches.size() && i > matches.get(j - 1)) {
ans[i] = i - matches.get(j - 1);
}
}
return ans;
}
}