给你一个字符串 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--){//如果当前字母等于cif(c==s[i]){//更新c的位置idx=i;}//更新c的位置,与从左往右遍历取最小值ans[i]=min(ans[i],abs(i-idx));}//返回输出return ans;}
};