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

题目来源于力扣(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));
}
posted @ 2020-07-02 22:20  知音12138  阅读(332)  评论(0编辑  收藏  举报