821. 字符的最短距离
两次遍历转化
对于任意一个s中的字符,只要判断跟前一个ccc和后一个ccc最近距离即可,可以先预处理每一个ccc下标,遍历一遍即可
时间复杂度: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;
}
};