P16841 [GKS 2021 #B] Increasing Substring 题解
题目大意
给你一个字符串,问每个位置 \(1≤i≤N\),求出以位置 \(i\) 结尾的最长严格递增子串的长度。
算法分析
拿一个变量记录上一次的最长严格递增子串的长度,每次看目前这一位是不是比前一位大,是就目前最长严格递增子串的长度为前一位的最长严格递增子串的长度加 \(1\),否则重新归 \(1\)。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int main(){
std::ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T,id=0;
cin>>T;
while(T--){
int n;
string s;
cin>>n>>s;
s=" "+s;
cout<<"Case #"<<++id<<": ";
int pre=1;
cout<<1<<' ';
for(int i=2;i<=n;i++){
if(s[i]>s[i-1])pre++;//如果大于
else pre=1;
cout<<pre<<' ';
}
cout<<'\n';
}
return 0;
}

浙公网安备 33010602011771号