821. 字符的最短距离
两次遍历转化
对于任意一个s中的字符,只要判断跟前一个 c c c和后一个 c c c最近距离即可,可以先预处理每一个 c c c下标,遍历一遍即可
时间复杂度: O ( n ) O(n) O(n)
class Solution {
public:
vector<int> shortestToChar(string s, char c) {
vector<int> d;
for (int i = 0; i < s.size(); i ++ )
if (s[i] == c)
d.push_back(i);
int k = 0;
vector<int> res(s.size(), 0);
for (int i = 0; i < s.size(); i ++ ) {
int minn = abs(i - d[k]);
if (k + 1 < d.size()) minn = min(minn, abs(i - d[k + 1]));
res[i] = minn;
if (s[i] == c && d[k] < i) {
k ++ ;
}
}
return res;
}
};