厦门手机网站中国制造网服务种类
news/
2025/9/23 18:29:35/
文章来源:
厦门手机网站,中国制造网服务种类,百度怎么做推广和宣传,简述常用的网络营销方法有哪些1. 题目 给你一个字符串 s 和一个字符 c #xff0c;且 c 是 s 中出现过的字符。 返回一个整数数组 answer #xff0c;其中 answer.length s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。 两个下标 i 和 j 之间的 距离 为 abs(i - j) #xff0c…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:vectorint shortestToChar(string s, char c) {vectorint index;vectorint 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:vectorint shortestToChar(string s, char c) {int n s.size();vectorint 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.mzph.cn/news/913472.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!