821. 字元的最短距離
阿新 • • 發佈:2022-04-19
821. 字元的最短距離
給你一個字串 s
和一個字元 c
,且 c
是 s
中出現過的字元。
返回一個整數陣列 answer
,其中 answer.length == s.length
且 answer[i]
是 s
中從下標 i
到離它 最近 的字元 c
的 距離 。
兩個下標 i
和 j
之間的 距離 為 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
均為小寫英文字母 - 題目資料保證
c
在s
中至少出現一次
簡單遍歷即可
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; } };