首页 > 其他 > 详细

821. 字符的最短距离『简单』

时间:2020-07-02 22:31:58      阅读:44      评论:0      收藏:0      [点我收藏+]

题目来源于力扣(LeetCode

一、题目

821. 字符的最短距离

技术分享图片

说明:

  • 字符串 S 的长度范围为 [1, 10000]
  • C 是一个单字符,且保证是字符串 S 里的字符。
  • SC 中的所有字母均为小写字母。

二、解题思路

  1. 定义两个数组,分别用于记录正序与倒序遍历字符串 S 时,各元素与字符元素 C 之间的距离

  2. 最后将两个数组进行比较,取最小值

三、代码实现

public static int[] shortestToChar(String S, char C) {
    int[] ascArr = new int[S.length()];
    int[] descArr = new int[S.length()];

    char[] sarr = S.toCharArray();
    // 记录元素与 C 元素的距离,初始值设大值,为数组长度
    int count = sarr.length;

    for (int i = 0; i < sarr.length; i++) {
        if (sarr[i] == C) {
            ascArr[i] = 0;
            // 目标元素出现后,count开始为零,其后的排序为1,2,3...
            count = 0;
        } else {
            ascArr[i] = ++count;
        }
    }

    count = sarr.length;
    for (int i = sarr.length - 1; i >= 0; i--) {
        if (sarr[i] == C) {
            descArr[i] = 0;
            count = 0;
        } else {
            descArr[i] = ++count;
        }
    }
    // 取两个数组中元素小的值
    for (int i = 0; i < ascArr.length; i++) {
        ascArr[i] = Math.min(ascArr[i], descArr[i]);
    }
    return ascArr;
}

四、执行用时

技术分享图片

五、部分测试用例

public static void main(String[] args) {
    String S = "loveleetcode";
    char C = ‘e‘;  // output: {3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0}

    int[] result = shortestToChar(S, C);
    System.out.println(Arrays.toString(result));
}

821. 字符的最短距离『简单』

原文:https://www.cnblogs.com/zhiyin1209/p/13227498.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!