Leetcode __821. 字符的最短距离

问题描述

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

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

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

想法

没有更好的想法之前,采取最笨重的方法
想法一:将所有目标char的位置记录,假设n个,遍历整个字符串假设长len,则做len*n次运算比较最小的存起来。

想法一实现

class Solution {
    public int[] shortestToChar(String S, char C) {
        if (S == null || S.length() == 0) {
            return null;
        }
        int[] ditance = new int[S.length()];//动态new数组,初始值都为0
        if (!S.contains(String.valueOf(C))) {
            return ditance;
        }
        List listNum = new ArrayList();
        for (int j = 0; j < S.length(); j++) {
            if(S.charAt(j)==C){
                listNum.add(j);
            }
        }
        for (int t = 0; t < S.length(); t++) {
            int min =Integer.MAX_VALUE;
           // int min =10001;
            for(int k =0;k<listNum.size();k++){
                int dis = Math.abs((int)listNum.get(k)-t);
                min = Math.min(min,dis);
            }
            ditance[t]=min;
        }

        return ditance;
    }
}

这里写图片描述

时间复杂度O(n2)

1、求最小的,在初始值设置的时候要引起注意;
若初始值设为0,则最小值都为0,应设为他的最大范围之上,由题意知S 的长度范围为 [1, 10000],最小距离的最大值为10000
但设置成 int min =Integer.MAX_VALUE;最万无一失
2、动态new出来的数组,未赋值时,初始值都为0

猜你喜欢

转载自blog.csdn.net/Growing_way/article/details/81948625