1. 程式人生 > 其它 >821. 字元的最短距離

821. 字元的最短距離

821. 字元的最短距離

給你一個字串 s 和一個字元 c ,且 cs 中出現過的字元。

返回一個整數陣列 answer ,其中 answer.length == s.lengthanswer[i]s 中從下標 i 到離它 最近 的字元 c距離

兩個下標 ij 之間的 距離abs(i - j) ,其中 abs 是絕對值函式。

示例 1:

輸入:s = "loveleetcode", c = "e"
輸出:[3,2,1,0,1,0,0,1,2,2,1,0]
解釋:字元 'e' 出現在下標 3、5、6 和 11 處(下標從 0 開始計數)。
距下標 0 最近的 'e' 出現在下標 3 ,所以距離為 abs(0 - 3) = 3 。
距下標 1 最近的 'e' 出現在下標 3 ,所以距離為 abs(1 - 3) = 2 。
對於下標 4 ,出現在下標 3 和下標 5 處的 'e' 都離它最近,但距離是一樣的 abs(4 - 3) == abs(4 - 5) = 1 。
距下標 8 最近的 'e' 出現在下標 6 ,所以距離為 abs(8 - 6) = 2 。

示例 2:

輸入:s = "aaab", c = "b"
輸出:[3,2,1,0]

提示:

  • 1 <= s.length <= 104
  • s[i]c 均為小寫英文字母
  • 題目資料保證 cs 中至少出現一次

簡單遍歷即可

class Solution {
public:
    vector<int> shortestToChar(string s, char c) {
        //記錄答案的vector全部初始化為s.size()
        vector<int>res(s.size(),s.size());
        //c到自身的距離為0
        vector<int>a;
        for(int i=0;i<s.size();i++){
            if(s[i]==c){
                res[i]=0;
                //c在陣列中的位置記錄下來
                a.push_back(i);
            }
        }
        //遍歷res陣列
        for(int i=0;i<res.size();i++){
            //對於不是c的數進行判斷
            if(res[i]!=0){
                //取這個數與出現c的位置的絕對值的最小值
                for(int j=0;j<a.size();j++){
                    res[i]=min(res[i],abs(i-a[j]));
                }
            }
        }
        return res;
    }
};