1. 程式人生 > 實用技巧 >821. 字元的最短距離『簡單』

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));
}