米哈游9.14笔试第一题

找出字符串中存在k个“mihoyo”的最短子串,如果存在,则输出左下标 和右下标,不存在就输出-1, 卡了半个小时了,代码一直25%,求大佬指教指教
#include<iostream>
using namespace std;
#include<vector>
#include<string>
int main() {
	int n, k;
	cin >> n >> k;
	string s;
	cin >> s;
	string res = "mihoyo";
	int count = 0;
	int l = 0;
	int r = 0;
	vector<pair<int, int>>vec;
	int min_len = INT16_MAX;
	for (int left = 0; left < n - 5; left++) {
		string temp = s.substr(left, 6);
		if (temp == res) {
			vec.push_back({ left, left + 6 - 1 });
			left = left + 5;
		}
	}
	int size = vec.size();
	if (size < k) {
		cout << -1 << endl;
		return 0;
	}
	else {
		int len = 20000000;
		for (int i = 0; i < vec.size() - k + 1; i++) {
			if (vec[i + k - 1].second - vec[i].first < len) {
				l = vec[i].first;
				r = vec[i + k - 1].second;
			}
		}
		cout << l <<" "<< r << endl;
	}
	return 0;

}

#米哈游23秋招笔试心得体会#
全部评论
#include <bits/stdc++.h> using namespace std; int n, k; string s; int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> k;     cin >> s;     int idx = s.find("mihoyo");     int ans = 2 * n;     vector<int> a;     int pre = 0;     while (idx != -1) {         a.push_back(idx + pre);         pre = pre + idx + 6;         string tmp = s.substr(pre);         idx = tmp.find("mihoyo");     }     if (a.size() < k) {         cout << -1 << endl;         return 0;     }     int l = 0, r = 0;     int ll, rr;     while (r < a.size()) {         while (r < a.size() && (r - l) < k - 1) {             r++;         }         if (r == a.size()) break;         int end = a[r] + 5;         int begin = a[l];         if (end - begin + 1 < ans) {             ans = end - begin + 1;             ll = begin, rr = end;         }         l++;     }     cout << ll << " " << rr << endl;     return 0; }
1 回复 分享
发布于 2022-09-14 22:18 北京
找到的不一定是最短的 例: 20 2 mihoyomihoyoaamihoyo
1 回复 分享
发布于 2022-09-14 22:22 四川
和你一样思路 过了33
1 回复 分享
发布于 2022-09-14 22:25 北京
我也是,25我很难理解
点赞 回复 分享
发布于 2022-09-14 22:15 陕西
俺也25
点赞 回复 分享
发布于 2022-09-14 22:23 江苏
这代码好像是我写的一样哈哈哈 我开始也忘记更新最小长度了 在这卡了好久
点赞 回复 分享
发布于 2022-09-14 22:28 湖南
没有更新len
点赞 回复 分享
发布于 2022-09-15 09:26 上海
先遍历一下找到所有米哈游的位置,然后在遍历一下这些位置,找到最短的
点赞 回复 分享
发布于 2022-09-15 15:53 上海

相关推荐

头像
11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务