首页 > 其他分享 >单词背诵(滑动窗口)

单词背诵(滑动窗口)

时间:2025-01-03 15:47:15浏览次数:1  
标签:arr 窗口 int cin 单词 背诵 mp 序列 滑动

题目链接:https://www.luogu.com.cn/problem/P1381

题意:分别给你两个字符串的序列t和序列s,要求你输出在序列s与序列t有多少个相同的字符串,以及相同字符串子串的最小长度

思路:

类似于最小覆盖子串问题
滑动窗口+简单哈希
通过map来存储,序列t中出现的字符串在map中-1,当成欠款,
窗口右边往右滑直到欠债还清,此时窗口中序列满足条件,然后窗口左边再往右滑看能不能尽可能地缩短序列长度,记录答案
然后窗口右边再往右滑一个单位,看以这个位置结尾的最短覆盖长度,直到r>=m

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
int ans=INT_MAX;
int cnt=0;
map<string,int>mp;
int debt=0;
map<string,bool>ap;
const int maxn=1e5+5;
string arr[maxn];
signed main()
{
	ios::sync_with_stdio(false),cin.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		string s;cin>>s;
		mp[s]--;
	}
	
	cin>>m;
	for(int i=0;i<m;i++)
	{
	cin>>arr[i];
	if(!ap[arr[i]]&&mp[arr[i]]<0)
	{
		ap[arr[i]]=true;
		cnt++;
	}
}

	int temp=cnt;
	for(int l=0,r=0;r<m;r++)
	{
		if(mp[arr[r]]<0)
		{
			cnt--;
		}
		mp[arr[r]]++;
		if(cnt==0)
		{
			while(mp[arr[l]]>0)
			{
				mp[arr[l++]]--;
			}
			ans=min(ans,r-l+1);
		}
	}
	cout<<temp<<endl;
	cout<<ans<<endl;
	return 0;
}


标签:arr,窗口,int,cin,单词,背诵,mp,序列,滑动
From: https://www.cnblogs.com/benscode/p/18650214

相关文章

  • 请使用js写一个单词折行算法
    在前端开发中,处理文本的单词折行(wordwrapping)是一个常见的需求,尤其是在显示长文本时。JavaScript提供了一些方法来实现这一点。下面是一个简单的单词折行算法示例,它可以根据指定的行宽将文本拆分成多行。/***将文本按指定宽度进行单词折行*@param{string}text-要进行......
  • WPF DevExpress按住鼠标下拉滑动列表功能
    usingSystem;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Threading;usingDevExpress.Xpf.Grid;namespaceClient{publicclassAutoScrollHelper{publicA......
  • 单词搜索(回溯)
    给定一个 mxn 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。......
  • 破解滑动验证码中的 w 参数 (OCaml 版本)
    滑动验证码通常会通过加密的w参数来验证请求的合法性。在本文中,我们将深入探索如何使用OCaml解析和生成w参数,以通过滑动验证码。步骤1:准备关键请求参数在整个滑动验证流程中,gt和challenge是两个必要的参数,用于标识操作并生成下一步的challenge。此外,w参数则是验证的......
  • 英语背单词 专四词汇 中英对照 2025年01月
    2025-01-02IndexWordPronunciationPartsofSpeechExplanationTranslationinChinese1pierce/pɪrs/verb1.Tomakeaholeoropeninginsomething.2.Tomoveorpassthroughsomethingsharply.刺穿;穿透2demonstrate/ˈdɛmənstreɪt/verb1.Tosh......
  • 背单词 纯英文 2025年01月
    2025-01-312025-01-302025-01-292025-01-282025-01-272025-01-262025-01-252025-01-242025-01-232025-01-222025-01-212025-01-202025-01-192025-01-182025-01-172025-01-162025-01-152025-01-142025-01-132025-01-122025-01-112025-01-102025-01-092025-01-082025-01-072025-......
  • 基于Redis有序集合实现滑动窗口限流
    滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间段内的请求次数。通过动态地滑动窗口,可以动态调整限流的速率,以应对不同的流量变化。整个限流可以概括为两个主要步骤:统计窗口内的请求数量应用限流规则Redis有序集......
  • C++背单词
    题目描述:最近小明在学习月份的英文单词一月January二月February三月March四月April五月May六月June七月July八月August九月September十月October十一月November十二月December小明爸爸想测试一下天佑到底有没有学会他说出每个月份的前3个字母,小明就写出月份的......
  • 优选算法《滑动窗口》
    在优选算法的第一章当中我们了解了双指针算法,相信通过那几道算法题的讲解你已经知道该如何灵活的使用双指针了吧,那么接下来我们就接着来学习下一个优选算法——滑动窗口,你这时可能会疑惑这个算法在之前怎么完全没有听说过,没有关系接下来在本篇当中就将带你一步步的了解滑动窗口......
  • SQL 实战:窗口函数进阶 – 实现复杂滑动窗口与动态累计计算
    窗口函数是SQL中非常强大的工具,能够在不改变原始数据粒度的情况下,动态进行排名、累计、滑动平均以及环比同比计算。在实际业务场景中,窗口函数常用于构建复杂的时间序列分析,如滚动累计、移动平均、同比/环比增长等。本文将深入探讨窗口函数的高级用法,通过具体案例展示如......