当前位置: 首页 > news >正文

821. 字符的最短距离 - 力扣

1. 题目

给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。

返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。

两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。

2. 示例

3. 分析 

我们先尝试一下暴力解法:将目标字符每次出现的位置保存到数组中,然后遍历字符串依次比较每个字符与目标字符每次出现的位置进行比较,寻找较小值即可

class Solution {
public:vector<int> shortestToChar(string s, char c) {vector<int> index;vector<int> ans;int n = s.size();// 记录目标字符出现的位置for(int i = 0; i < n; i++){if(s[i] == c){index.push_back(i);}}// 遍历字符串,对每个字符与目标字符出现下标进行比较,寻找较小值for(int i = 0; i < n; i++){int minres = INT_MAX;for(int j = 0; j < index.size(); j++){minres = min(minres, abs(index[j]-i));}ans.push_back(minres);}return ans;}
};

时间复杂度:O(N2)


能不能做到 O(N),可以的:

问题可以转换成,对 每个字符s[i] 的下标 i,求

  • 每个字符s[i]到其左侧最近的字符 c 的距离。
  • 每个字符s[i]到其右侧最近的字符 c 的距离。

这两者的较小值。

分别对字符串从左往右、从右往左遍历。

从左往右:在遍历的同时记录二者的距离,也需更新目标字符的下标。但在刚开始遍历时,目标字符可能不存在,所以二者距离也因此不能记录,所以为了记录二者的距离,我们可以使用 -n 初始化目标字符下标,这里 n 是 字符串的长度,距离就为 abs(index - i)。若找到第一个目标字符,二者距离也为 abs(index - i)。

从右往左:同理。初始化目标字符下标为 2n这里 n 是 字符串的长度。顺便比较此时二者距离与从左往右遍历时二者距离哪个为较小者。

class Solution {
public:vector<int> shortestToChar(string s, char c) {int n = s.size();vector<int> ans(n);// 从左往右for(int i = 0, index = -n; i < n; i++){if(s[i] == c) index = i;ans[i] = i - index;}// 从右往左for(int i = n - 1, index = 2*n; i >= 0; i--){if(s[i] == c) index = i;ans[i] = min(ans[i], index - i);}return ans;}
};
http://www.lryc.cn/news/355575.html

相关文章:

  • BI工具如何为金融行业带来变革?金融行业营销管理策略大揭秘
  • 操作系统 - 计算机系统概述
  • [论文笔记]REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS
  • []下标的意义
  • 去重复记录和排序——kettle开发09
  • 中创算力与中国移动初步达成战略合作意向,共同构建智能生态圈!
  • 基础—SQL—DML(数据操作语言)插入数据
  • 【改變,是面對的開始】
  • AI大模型实现德语口语练习
  • 一文读懂npm i的命令以及作用
  • You don‘t have enough free space或者no space left on device异常
  • 饮料添加剂新型褪色光照试验仪器太阳光模拟器
  • ElasticSearch - 删除已经设置的认证密码(7.x)
  • 9.4 Go语言入门(运算符)
  • CLIP 源码分析:simple_tokenizer.py
  • AWS安全性身份和合规性之Shield
  • Midjourney入门篇 | 打造最逼真的照片(强烈推荐)
  • 【运维自动化-配置平台】如何跨业务转移主机
  • connection problem,giving up
  • Linux-----sed案例练习
  • 【华为OD机试-C卷D卷-200分】运输时间(C++/Java/Python)
  • flink程序本地运行报: A JNI error has occurred和java.lang.NoClassDefFoundError
  • yolox-何为EMA?
  • Java:String、StringBuffer和StringBuilder的区别
  • 虚拟化技术 分布式资源调度
  • 【Element-plus】vue组合式中使用el-upload通过oss接口上传图片流程(可直接复制使用)
  • C++ 数据结构算法 学习笔记(33) -查找算法及企业级应用
  • 【Linux】在Ubuntu 16.04上安装Gerrit + PostgreSQL + Apache服务
  • 数据倾斜那些事儿
  • python考试成绩管理与分析:从列表到方差