LeetCode 821. Shortest Distance to a Character 字符的最短距离

题目:

给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。

示例 1:

输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]

说明:

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

解题思路:

保存上一个字符C出现的位置,对当前的字符C和上一个字符C之间的字符计算距离,最后把字符串尾部剩下的字符计算和字符C的距离。

代码实现:

class Solution {
    public int[] shortestToChar(String S, char C) {
        if (S == null) return new int[0];
        int[] result = new int[S.length()];
        char[] chs = S.toCharArray();
        // 上一个字符为C的点
        int flag = -1;
        for (int i = 0; i < chs.length; i ++) {
            if (chs[i] == C) {
                for (int j = i; j > flag; j --) {
                    if (flag == -1) result[j] = i - j;
                    else result[j] = Integer.min(i - j, j - flag);
                }
                flag = i;
            }
        }
        // 最后剩下的几个字符距离
        if (flag < chs.length - 1) {
            for (int j = flag + 1; j < chs.length; j ++) {
                if (j == flag + 1) result[j] = 1;
                else result[j] = result[j - 1] + 1;
            }
        }
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/zhangzhetaojj/article/details/80724589