彩色宝石项链

有一条彩色宝石项链,是由很多种不同的宝石组成的,太多了,不说了。

反正思路就是滑动窗口,用map记录,或者two pointer也行。上次我刚好在cf碰到一题,题意是求包含所有出现字符的最小子串,然后看到一种很好的解法,然后就写下来,这题算水题吧!还有,解决环的问题就是在后面再加上自己,就可以了。

 1 #include<bits/stdc++.h>
 2 #define pb push_back
 3 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
 4 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
 5 typedef long long ll;
 6 using namespace std;
 7 typedef pair<int, int> pii;
 8 const int maxn = 1e3 + 10;
 9 void solve() {
10     string str;
11     set<char> se;
12     while(cin >> str) {
13         se.clear();
14         for (char x : str) {
15             if(x >= 'A' && x <= 'E') se.insert(x);
16         }
17         if(se.size() < 5) {
18             cout << 0 << endl; continue;
19         }
20         str += str;
21         int n = str.size();
22         vector<int> a(n, 0);
23         for (int i = 0; i < 5; i++) {
24             int last = -1;
25             char cur = 'A' + i;
26             for (int j = 0; j < n; j++) {
27                 if(str[j] == cur) last = j;
28                 if(last == -1) a[j] = n;
29                 else a[j] = max(a[j], j - last + 1);
30             }
31         }
32 
33         int res = n;
34         for (int i = 0; i < n; i++) {
35             //cout << a[i] << endl;
36             res = min(res, a[i]);
37         }
38         cout << n / 2 - res << endl;
39     }
40 }
41 int main() {
42     //freopen("test.in", "r", stdin);
43     //freopen("test.out", "w", stdout);
44     solve();
45     return 0;
46 }

 

转载于:https://www.cnblogs.com/y119777/p/5893163.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值