leetcode821-Shortest Distance to a Character

题目

给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。
返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。
两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。
示例 1:

输入:s = “loveleetcode”, c = “e”
输出:[3,2,1,0,1,0,0,1,2,2,1,0]
解释:字符 ‘e’ 出现在下标 3、5、6 和 11 处(下标从 0 开始计数)。
距下标 0 最近的 ‘e’ 出现在下标 3 ,所以距离为 abs(0 - 3) = 3 。
距下标 1 最近的 ‘e’ 出现在下标 3 ,所以距离为 abs(1 - 3) = 2 。
对于下标 4 ,出现在下标 3 和下标 5 处的 ‘e’ 都离它最近,但距离是一样的 abs(4 - 3) == abs(4 - 5) = 1 。
距下标 8 最近的 ‘e’ 出现在下标 6 ,所以距离为 abs(8 - 6) = 2 。

分析

这道题目很直接的思路就是依次遍历数组每个元素,分别向左遍历向右遍历,找到和字符c相同的元素然后更新当前元素到字符c之间的距离。这种方法是更新非c字符的距离
还有一种时间复杂度更小的方法,我们先正序遍历数组,等找到字符c以后我们更新每个元素到c的距离,一遍下来有些元素已经有了到字符c的最短距离了,然后倒叙遍历数组,用类似的思路并且与第一遍正序遍历的结果也进行比较寻找最小值

import java.util.Arrays;

public class shortestDistancetoaCharacter{
	public static void main(String[] args) {
		String s = "loveleetcode";
		char c = 'e';
		int[] res = getShortest(s,c);
		for(int i = 0;i<res.length;i++) {
			System.out.println(res[i]);
		}
	}
	public static int[] getShortest(String str,char c) {
		int len = str.length();
		int[] res = new int[len];
		Arrays.fill(res,Integer.MAX_VALUE);
		for(int i = 0,j = -1;i<len;i++) {
			if(str.charAt(i) == c) {
				res[i] = 0;
				j = i;
			} else if(j != -1) {
				res[i] = i - j;
			}
		}
		for(int i = len - 1,j = -1;i>= 0;i--) {
			if(str.charAt(i) == c) {
				res[i] = 0;
				j = i;
			} else if(j != -1) {
				res[i] = Math.min(res[i],j-i);
			}
		}
		return res;
	}
}

相关推荐

  1. leetcode821-Shortest Distance to a Character

    2024-04-21 07:04:04       30 阅读
  2. LeetCode-827. 最大人工岛

    2024-04-21 07:04:04       68 阅读
  3. LeetCode-day08-881. 救生艇

    2024-04-21 07:04:04       29 阅读
  4. 力扣(leetcode)第821题字符的最短距离(Python)

    2024-04-21 07:04:04       56 阅读
  5. 力扣(leetcode)第824题山羊拉丁文(Python)

    2024-04-21 07:04:04       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 07:04:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 07:04:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 07:04:04       82 阅读
  4. Python语言-面向对象

    2024-04-21 07:04:04       91 阅读

热门阅读

  1. Ai语音机器人系统语音识别达到了什么水准

    2024-04-21 07:04:04       35 阅读
  2. 插件收集(idea Communtity Edtion)

    2024-04-21 07:04:04       32 阅读
  3. 【前端】用CSS实现div全屏铺满的方式

    2024-04-21 07:04:04       37 阅读
  4. js的map函数

    2024-04-21 07:04:04       28 阅读
  5. eNSP 静态路由综合实验

    2024-04-21 07:04:04       40 阅读
  6. Linux下如何使用Git进行版本控制

    2024-04-21 07:04:04       23 阅读
  7. 迭代器和生成器

    2024-04-21 07:04:04       30 阅读