题目
一个字符串中,字符a和h间隔出现为合法的子字符串。比如a,h,ah,ha,aha,haha都是合法的。但是aa,hh,abcd都不是合法的子字符串。那么给出一个字符串,求最长合法的子字符串的长度。
输入
第一行为n,表示字符串的长度;
第二行为字符串s,s由字符组成。
输出
最长子字符串长度l。
样例1
输入:
6
aahahh
输出
4
样例2
输入:
4
abcd
输出
1
代码
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int maxLen(string s){
int result =0;
unordered_map<char, char> map = {{'a','h'},{'h','a'}};
for(int i=0; i<s.size(); i++){
if(s[i]=='a'||s[i]=='h'){
int left = i;
int right = i;
while(right<s.size()-1 && s[right+1]==map[s[right]]){
right++;
}
result = max(result, right-left+1);
i = right;
}
}
return result;
}
int main(){
int len;
cin>>len;
string s;
while(len--){
char temp;
cin>>temp;
s = s + temp;
}
cout<<maxLen(s)<<endl;
}
解析
使用双指针法:
符合条件则移动右指针,计算左右指针区间长度。
条件由字典构成。