821 字符的最短距离
给你一个字符串 s
和一个字符 c
,且 c
是 s
中出现过的字符。
返回一个整数数组 answer
,其中 answer.length == s.length
且 answer[i]
是 s
中从下标 i
到离它 最近 的字符 c
的 距离 。
两个下标 i
和 j
之间的 距离 为 abs(i - j)
,其中 abs
是绝对值函数。
class Solution {
public:
vector<int> shortestToChar(string s, char c) {
//输出距离
vector<int>ans(n);
//定义n为字符串长度
int n=s.size();
//从左往右遍历字符串,c当前位置存为-n,保证一开始足够大
for(auto i=0,idx=-n;i<s.size();i++){
//如果当前字母与c相等
if(c==s[i]){
//更新c的当前位置
idx=i;
}
//保存距离
ans[i]=abs(i-idx);
}
//从右往左遍历字符串,c当前位置存为2n,保证最右边字母距离足够大
for(int i=n-1,idx=2*n;i>=0;i--){
//如果当前字母等于c
if(c==s[i]){
//更新c的位置
idx=i;
}
//更新c的位置,与从左往右遍历取最小值
ans[i]=min(ans[i],abs(i-idx));
}
//返回输出
return ans;
}
};