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索引). ...
随机推荐
- VxWorks引导启动过程
https://blog.csdn.net/phunxm/article/details/6979089
- jumpserver部署1.0版本
A. jumpserver概述 跳板机概述: 跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作: 跳板机缺点:没有实现对运维人员操作行为的 ...
- java课堂动手测试
课堂实验3 一个Java类文件中真的只能有一个公有类吗? 经过测试,当含有两个public 类时会报错,不能执行,假如删除第二个public则可以正常生成,说明一个java文件只能有一个公有类. 课 ...
- 一个C语言外挂程序
首先建立一个控制台应用程序 引入Windows.h库函数 MessageBoxA(句柄--通常是0,提示框内容,提示框标题,按钮) #include <Windows.h> int mai ...
- C++ fstream 用法
#include <fstream> #include <iostream> main() { int a,b,c,d; std::ifstream infile (" ...
- 【NOIP2016提高A组模拟9.24】我的快乐时代
题目 分析 虽然我们很难求出\(\sum_{i=n}^mjoy(i)\), 但是我们可以分别求出\(\sum_{i=1}^mjoy(i)\)和\(\sum_{i=1}^{n-1}joy(i)\),相减 ...
- springboot 在idea中实现热部署
SpringBoot的web项目,在每一次修改了java文件或者是resource的时候,都必须去重启一下项目,这样的话浪费了很多的时间,实现了热部署,在每一次作了修改之后,都会自动的重启 第一步:引 ...
- Python连接MySQL之Python库pymysql
连接数据库 pymysql连接数据库的方式和使用sqlite的方式基本相同: 使用connect创建连接对象 connect.cursor创建游标对象,SQL语句的执行基本都在游标上进行 cursor ...
- Composite UI Application Block(CAB)
序言 资料 https://www.cnblogs.com/lglruirui/archive/2010/06/21/1761737.html?tdsourcetag=s_pcqq_aiomsg ht ...
- VSCode编辑器用户设置
{"gitlens.advanced.messages": {"suppressCommitHasNoPreviousCommitWarning": false ...