心情有点难受最近一段时间,第二次做的leetcode?第一个题自然是两数之和了,笑死,就是它这不是main这种,而是这种模块化的提交方式写着有点让人不舒服就是说,我还是选择写个main再复制上去改改…
就一个普通的滑动窗口的题目,唯一值得稍微用心点的是那两个map的处理,反正我在这又debug了好久…但是de完后就一次过了
附上自己的代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s, t;
cin >> s >> t;
map<int, int>m,m1;
for (auto i : t)
m[i]++;
int i = 0, j = -1;
int tar = t.length();
int slen = s.length();
int cnt = 0;
int minv = slen;
int mini = 0;
while (1)
{
if (cnt < tar)
{
j++;
if (j >= slen)
break;
if (m[s[j]])
{
if (m1[s[j]] < m[s[j]])
cnt++;
m1[s[j]]++;
}
}
else if(cnt == tar)
{
if (j - i < minv)
{
minv = j - i;
mini = i;
}
if (m1[s[i]] == m[s[i]]&&m[s[i]])
{
m1[s[i]]--;
cnt--;
}
else if (m1[s[i]] > m[s[i]])
m1[s[i]]--;
i++;
}
}
if (mini == 0 && minv == slen)
cout << "zero";
else
{
for (int i = mini; i <= mini+minv; i++)
cout << s[i];
}
}
啊,复制错了,这是我main函数的代码,应该附上leetcode的
class Solution {
public:
string minWindow(string s, string t) {
map<int, int>m,m1;
for (auto i : t)
m[i]++;
int i = 0, j = -1;
int tar = t.length();
int slen = s.length();
int cnt = 0;
int minv = slen;
int mini = 0;
while (1)
{
if (cnt < tar)
{
j++;
if (j >= slen)
break;
if (m[s[j]])
{
if (m1[s[j]] < m[s[j]])
cnt++;
m1[s[j]]++;
}
}
else if(cnt == tar)
{
if (j - i < minv)
{
minv = j - i;
mini = i;
}
if (m1[s[i]] == m[s[i]]&&m[s[i]])
{
m1[s[i]]--;
cnt--;
}
else if (m1[s[i]] > m[s[i]])
m1[s[i]]--;
i++;
}
}
if (mini == 0 && minv == slen)
return "";
else
{
string re;
for (int i = mini; i <= mini+minv; i++)
re+=(s[i]);
return re;
}
return "helloworld";
}
};
emm,怎么评价好呢…这个标记为困难的题好像有点简单
本文探讨了一道被标记为困难的LeetCode题目76:最小覆盖子串,分享了作者的解题思路、代码实现及自我评价,适合深入理解滑动窗口技巧的读者。


被折叠的 条评论
为什么被折叠?



