1. 题目
给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
示例 1:输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-distance-to-a-character
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 先扫描一遍,确定字符 C 的位置,存储起来,再添加首位两个"无穷远"的虚拟位置
- 再扫一遍,对不为 C 的字符,计算其到前一个 C 和 后一个 C 的两个距离的较小者存入答案
- 碰到 C 则,更新 前一个 C 和 后一个 C(left,right)
class Solution {
public:vector<int> shortestToChar(string S, char C) {int i, j, left, right;vector<int> ans(S.size());vector<int> positionsC;for(i = 0; i < S.size(); ++i) {if(S[i] == C)positionsC.push_back(i);}positionsC.insert(positionsC.begin(),-20000);positionsC.push_back(300000);left = positionsC[0];right = positionsC[1];for(i = 0, j = 1; i < S.size(); ++i) {if(S[i] == C){ans[i] = 0;left = right;right = positionsC[++j];}else{ans[i] = min(i-left,right-i);}}return ans;}
};