維護一個滿足條件的窗口大小,然后進行雙指針移動
1.最長子串
題目鏈接:1.最長子串 - 藍橋云課
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
int k;
signed main()
{int max_len=0,left=0;cin>>s>>k;unordered_map<char,int>nums; //滑動窗口雙指針for(int right=0; right<s.size(); right++){nums[s[right]]++;while(nums[s[right]]>k) //如果某個字符的頻率超過了 k,則縮小窗口{nums[s[left]]--;left++;}max_len=max(max_len,right-left+1);}cout<<max_len<<endl;return 0;
}
2.滿足條件的子串個數
題目鏈接:6.滿足條件的子串個數 - 藍橋云課
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
int k;
signed main()
{int sum=0,left=0;cin>>s>>k;unordered_map<char,int>nums; //滑動窗口雙指針for(int right=0; right<s.size(); right++){nums[s[right]]++;while(nums[s[right]]>k) //如果某個字符的頻率超過了 k,則縮小窗口{nums[s[left]]--;left++;}sum+=(right-left+1); //以新right新形成的好串的數量
// abc
// a a 1
// ab b ab 2
// abc c bc abc 3}cout<<sum<<endl;return 0;
}
3.區間平均值
題目鏈接:0區間平均值 - 藍橋云課
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
signed main()
{cin>>t;while(t--){int n,k;int x[110],sum[110];cin>>n;for(int i=1;i<=n;i++){cin>>x[i];sum[i]=sum[i-1]+x[i];}cin>>k;while(k--){int l,r;cin>>l>>r;printf("%.2f\n",1.0*(sum[r]-sum[l-1])/(r-l+1)); }}return 0;
}