help
查看原帖
help
1183222
封禁用户楼主2023/11/8 12:14
//P1381 单词背诵

/*思路:双指针

		1)如果是目标单词,累计++,
			如果只有1个,长度更新,,ans++ 
		2)i<j情况下
			1,如果i重复了,i++
			2,如果i没重复,break
			3. 如果i不在表中,i++
			
		3)更新长度 
*/

#include<bits/stdc++.h>
using namespace std;

int n, m, ans, len;
string w;
const int maxn =1005;
const int maxm = 1e5 + 5;

string s[maxm];

map<string, int > word;
map<string, int > vis;

int main () {
	
	cin >> n;
	for (int i = 1;i <= n ;i++){
		cin >> w; 
		word[w] = 1;
	}
	
	cin >> m;
	int i = 1;
	for (int j = 1;j <= m; j++){
		cin >> s[j];
		if (word[s[j]]) vis[s[j]]++;
		if(vis[s[j]] == 1) ans++, len = j - i + 1;
		
		while (i <= j) {
			if (vis[s[i]] == 1) break;
			if (vis[s[i]] >= 2) i++, vis[s[i]]--;
			if (!word[s[i]]) i++;
		}
		len = min (len, j - i + 1);
	}
	cout << ans  << endl << len;
	return 0;
}
2023/11/8 12:14
加载中...