821. 字元的最短距離『簡單』
阿新 • • 發佈:2020-07-03
題目來源於力扣(LeetCode)
目錄
一、題目
說明:
- 字串
S
的長度範圍為[1, 10000]
。C
是一個單字元,且保證是字串S
裡的字元。S
和C
中的所有字母均為小寫字母。
二、解題思路
-
定義兩個陣列,分別用於記錄正序與倒序遍歷字串 S 時,各元素與字元元素 C 之間的距離
-
最後將兩個陣列進行比較,取最小值
三、程式碼實現
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));
}