博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode算法题-Shortest Distance to a Character(Java实现)
阅读量:7204 次
发布时间:2019-06-29

本文共 1334 字,大约阅读时间需要 4 分钟。

这是悦乐书的第321次更新,第343篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第191题(顺位题号是821)。给定字符串S和字符C,返回一个整数数组,表示字符串中所有字符到字符C的最短距离。例如:

输入:S =“loveleetcode”,C ='e'

输出:[3,2,1,0,1,0,0,1,2,2,1,0]

注意

  • S字符串长度为[1,10000]。

  • C是单个字符,存在于字符串S中。

  • S和C中的所有字母都是小写的。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

根据题目给的示例,当字符串中的字符和给定的字符相等时,距离为0,不相等时,距离会取该字符到左右相近的给定字符的距离中的最小值。

因此,我们可以直接遍历字符串中的字符,如果为给定字符就跳过,不为给定字符,就从当前字符所在的位置开始,分别向左和向右寻找给定字符,然后计算两边的距离,取两者之间的最小值即可。在向两边查找C时,需要注意字符串中字符下标边界不能越界的情况。

public int[] shortestToChar(String S, char C) {    int n = S.length();    int[] result = new int[n];    for (int i=0; i
= 0 && S.charAt(left) != C) { left--; } // 计算距离,前提是left要大于等于0 if (left >= 0) { result[i] = Math.min(i-left, result[i]); } } return result;}

03 第二种解法

依旧是利用向左向右计算距离的思路,但是此解法更加简洁。第一种解法中,每次都需要取向左向右查找C的位置,但是C所在的位置是固定的,只有当遇上C的时候,才会跳到下一个C那里,所以我们可以使用两个临时变量,将前一次C的位置和下一次C的位置存起来,遇到C就更新两个变量的值,另外不管遇不遇上C,都要计算当前字符与C的最近距离。

public int[] shortestToChar2(String S, char C) {    int prev = -10001, next = S.indexOf(C), n = S.length();    int[] result = new int[n];    for (int i=0; i

04 小结

算法专题目前已日更超过五个月,算法题文章191+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

转载于:https://www.cnblogs.com/xiaochuan94/p/10801267.html

你可能感兴趣的文章
不要把时间浪费在QQ上
查看>>
ntohs, ntohl, htons,htonl的比较和详解
查看>>
Ubuntu12.04 eclipse4.2安装ADT20时报错
查看>>
计算形状Shape(圆Circle,矩形Square ,正方形Rectangle)的面积、周长
查看>>
WP7基础学习---第七讲
查看>>
[摘录]第一部分 掌舵领航(4)
查看>>
50、转自知乎上android开发相见恨晚的接口
查看>>
递归 && 反射
查看>>
android AlertDialog 错误 OnClickListener 报错
查看>>
mysql 随机数字 & 置顶排序
查看>>
javaweb配置连接mysql数据库
查看>>
Android — — —动态添加碎片
查看>>
欧拉函数
查看>>
如何使用系统软件截图
查看>>
【转】 Oracle 中的一些重要V$ 动态性能视图,系统视图和表
查看>>
模板模式 c#
查看>>
由于js词法性质和全局变量被更改,循环绑定的click事件执行时变量和定义时 不一致的bug,各种解决方案。...
查看>>
图片处理--边缘高亮
查看>>
解析Disruptor:解密内存障
查看>>
管道-过滤器模式学习总结
查看>>