双指针解决字符的最短距离

图片说明

暴力解法

class Solution {
    public int[] shortestToChar(String s, char c) {
        int len = s.length();
        ArrayList<Integer> index = new ArrayList<>();
        int i = 0;
        for(i = 0; i < len; i++){
            if(s.charAt(i) == c){
                index.add(i);
            }
        }
        int[] res = new int[len];
        for(i = 0; i < len; i++){
            int min = Integer.MAX_VALUE;
            for(int j = 0; j < index.size(); j++){
                min = Math.min(min, Math.abs(i - index.get(j)));
            }
            res[i] = min;     
        }
        return res;
    }
}

双指针降低时间复杂度

不用在索引上依次去遍历目标字符的索引集合找到最近的,而是在第一层循环中更新最近的索引位置。

class Solution {
    public int[] shortestToChar(String s, char c) {
        int len = s.length();
        int[] res = new int[len];
        int l = s.indexOf(c), r = s.indexOf(c, l+1);
        for(int i = 0; i < s.length(); i++){
            res[i] = Math.abs(l - i);
            if(r != -1){
                res[i] = Math.min(res[i], r - i);
                if(i == r){
                    res[i] = 0;
                    l = r;
                    r = s.indexOf(c, r + 1);
                }
            }
        }
        return res;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 12:05
俺不中了,BOSS遇到了一个hr,我觉得我咨询的问题都很正常吧,然后直接就被拒绝了???
恶龙战士:你问的太多了,要不就整理成一段话直接问他,一个一个问不太好
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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