作者oin1104 (是oin的說)
看板Marginalman
標題Re: [閒聊] 每日LeetCode
時間Sun Feb 4 13:36:33 2024
今天的題目:
在s字串裡面找到包含t字串的最短字串
包含是只要有出現裡面的字母就好
順序不管
解法:
直接two pointer sliding window 什麼的
全部加起來然後全部看一下
就過ㄌ
後來發現我應該可以在縮小 l 左界
的時候用while直接縮到最小
不過好懶捏
姆咪
class Solution {
public:
string minWindow(string s, string t)
{
int len = s.size();
int lent = t.size();
int save[300] = {};
int tar[300] = {};
int anslen = 99999999;
int ansp = -1;
for(int i = 0 ; i < lent ; i ++)
{
tar[t[i]] ++;
}
int l = 0 ;
int r = 0 ;
save[s[r]] ++;
while(r != len)
{
int cnt = 0;
int ok = 1;
for(int c = 0 ; c <300 ; c ++)
{
cnt += save[c];
if(save[c] < tar[c])
{
ok = 0;
}
}
if(ok == 0)
{
r++;
save[s[r]] ++;
}
else if(ok == 1)
{
//printf("%d %d \n",l ,r);
if(cnt < anslen)
{
anslen = cnt;
ansp = l;
}
save[s[l]]--;
l++;
}
}
string ans;
if(ansp != -1)
{
ans = s.substr(ansp, anslen);
}
//printf("ansp = %d , anslen = %d ", ansp , anslen);
return ans;
}
};
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.30.206 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1707024995.A.BC9.html
→ kazunerae: int ok = 1 02/04 13:39
推 SecondRun: 大師 02/04 14:41