leetcode821
题目:
给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
示例 1:
输入: S = "loveleetcode", C = 'e' 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
说明:
- 字符串
S的长度范围为[1, 10000]。 C是一个单字符,且保证是字符串S里的字符。S和C中的所有字母均为小写字母。
解题思路:
首先记住每个目标字符C出现的位置,记录在vector s中;
然后遍历字符串S,如果当前位置字符为C,则res.push_back(0);
如果当前字符不是C,则把当前位置与s中的位置逐个求距离,去最短的,放入res中。
代码:
class Solution { public: vector<int> shortestToChar(string S, char C) { vector<int> res; vector<int> s; for(int i=0;i<S.size();i++){ if(S[i] == C){ s.push_back(i); } } for(int i=0;i<S.size();i++){ if(S[i] == C){ res.push_back(0); }else{ int num = INT_MAX; for(int n:s){ num = min(abs(n-i), num); } res.push_back(num); } } return res; } };

浙公网安备 33010602011771号