821. 字符的最短距离

题目

给你一个字符串 s 和一个字符 c ,且 cs 中出现过的字符。

返回一个整数数组 answer ,其中 answer.length == s.lengthanswer[i]s 中从下标 i 到离它最近的字符 c距离

两个下标 ij 之间的距离abs(i - j) ,其中 abs 是绝对值函数。

来源:力扣(LeetCode)


解答

从左到右遍历一次,再从右到左遍历一次即可。

第一次遍历找的是距离左边最近的距离,第二次是右边。

代码如下:

class Solution {
public:
    vector<int> shortestToChar(string s, char c) {
        int n = s.size();
        vector<int> ret(n, n + 1);

        int pos = -1;
        for (int i = 0; i < n; ++i) {
            if (s[i] == c) {
                pos = i;
            }
            if (pos != -1) {
                ret[i] = i - pos;
            }
        }

        pos = -1;
        for (int i = n - 1; i >= 0; i--) {
            if (s[i] == c) {
                pos = i;
            }
            if (pos != -1) {
                ret[i] = min(ret[i], pos - i);
            }
        }

        return ret;
    }
};
我的力扣每日一题 文章被收录于专栏

就是力扣每日一题的记录,解法可能存在参考,但一定是我自己理解和口述的。 题解更注重理解,而不是为了缩短代码行数,为了精简而精简。

全部评论

相关推荐

HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务