LeetCode算法题-Shortest Distance to a Character(Java实现)
这是悦乐书的第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<n; i++) {
if (S.charAt(i) == C) {
continue;
}
// 向右寻找C
int right = i+1;
while (right < n && S.charAt(right) != C) {
right++;
}
// 如果当前字符一直向右寻找都找不到C,
// 就将其距离赋值为字符串的长度
if (right < n) {
result[i] = right-i;
} else {
result[i] = n;
}
// 向左寻找C
int left = i-1;
while (left >= 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<n; i++) {
// 遇到C,更新prev、next两个变量的值
if (i == next) {
prev = next;
next = S.indexOf(C, prev+1);
}
result[i] = Math.min(i-prev, Math.abs(i-next));
}
return result;
}
04 小结
算法专题目前已日更超过五个月,算法题文章191+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Shortest Distance to a Character(Java实现)的更多相关文章
- LeetCode算法题-Shortest Unsorted Continuous Subarray(Java实现)
这是悦乐书的第267次更新,第281篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第134题(顺位题号是581).给定一个整数数组,找到一个连续的子数组,按升序对该子数组 ...
- 【LeetCode】821. Shortest Distance to a Character 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 过两遍数组 日期 题目地址:https://leet ...
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
- LeetCode算法题-Shortest Completing Word(Java实现)
这是悦乐书的第309次更新,第330篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第178题(顺位题号是748).从给定的字典单词中查找最小长度单词,其中包含字符串lic ...
- LeetCode算法题-Hamming Distance(Java实现)
这是悦乐书的第237次更新,第250篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第104题(顺位题号是461).两个整数之间的汉明距离是相应位不同的位置数.给定两个整数 ...
- LeetCode算法题-Maximize Distance to Closest Person(Java实现)
这是悦乐书的第328次更新,第351篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849).在一排座位中,1表示一个人坐在该座位上,0表示座位是空的 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode算法题-Robot Return to Origin(Java实现)
这是悦乐书的第281次更新,第298篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第149题(顺位题号是657).在2D平面上有一个从位置(0,0)开始的机器人.给定其移 ...
- LeetCode算法题-Min Cost Climbing Stairs(Java实现)
这是悦乐书的第307次更新,第327篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第176题(顺位题号是746).在楼梯上,第i步有一些非负成本成本[i]分配(0索引). ...
随机推荐
- [HAOI2010]软件安装(Tarjan,树形dp)
[HAOI2010]软件安装 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可 ...
- python基础练习题7
1.创建Person类,属性有姓名.年龄.性别,创建方法personInfo,打印这个人的信息2.创建Student类,继承Person类,属性有学院college,班级class,重写父类perso ...
- 批处理实现自动Git push
用Git用的多,每次修改文件后都需要敲几条命令: git add git commit git push ······ 太麻烦了 于是想到使用批处理(.bat)来自动化这个过程(注意:Windows环 ...
- Codeforces Round #569 (Div. 2) C. Valeriy and Deque
链接: https://codeforces.com/contest/1180/problem/C 题意: Recently, on the course of algorithms and data ...
- 21.栈的压入、弹出序列(python)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- CondaHTTPError问题的解决
我是在配置pytorch时遇到的这个错误,截图如下: 这是某个网址访问失败导致的,我们可以通过添加其他路径解决这个问题,分别添加如下4个镜像路径,解决问题: 1)conda config --add ...
- css-js-弹出层
HTML: <!-- 弹出层 --> <div class="popwindow" > <div class="pop" id=& ...
- LeetCode - 滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 输入: nums ...
- MYSQL安装失败,一打开就出现MySQL-Workbench已停止工作
1.由于系统重新安装,环境都是新的,出现MySQL-Workbench已停止工作 解决:下载 微软常用运行库合集 安装即可
- 用Java 实现断点续传 (HTTP)
在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...