• 交换一次最长连续字符的长度


    题目:

    分析:

    记录GSG这样的结构,记录左右两边的连续G的长度

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<vector>
    using namespace std;
    const int max_=1e5+5;
    vector<int>ve;
    int R[max_],L[max_];
    int main()
    {
        int n;
        cin>>n;
        string str;
        cin>>str;
        int tem=0,part=0,maxm=0;
        for(int i=0;i<n;i++)
        {
            if(str[i]=='G')
            {
                tem++;
                if(tem==1)
                    part++;
            }
            maxm=max(maxm,tem);
            if(i>0&&i<n-1)
            {
                if(str[i]=='S'&&str[i-1]=='G'&&str[i+1]=='G')
                {
                    ve.push_back(i);
                    L[i]=tem;
                }
            }
            if(str[i]=='S')
                tem=0;
        }
        tem=0;
        for(int i=n-1;i>=0;i--)
        {
            if(str[i]=='G')
            {
                tem++;
            }
            maxm=max(maxm,tem);
            if(i<n-1&&i>0)
            {
                if(str[i]=='S'&&str[i-1]=='G'&&str[i+1]=='G')
                {
                    R[i]=tem;
                }
            }
            if(str[i]=='S')
                tem=0;
        }
        if(part>=2)
            maxm+=1;
        int len=ve.size();
        for(int i=0;i<len;i++)
        {
            int id=ve[i];
            maxm=max(maxm,R[id]+L[id]+(part>=3));
        }
        cout<<maxm<<endl;
    }
    View Code
  • 相关阅读:
    值类型和引用类型
    0513二分查找练习
    0512随机4位验证码
    0511java 随机6个不同的彩票数
    随机数的产生机制
    0510Java 练习
    0509java练习题
    java循环作业
    字符集的由来及发展
    hdu2577_键入字母
  • 原文地址:https://www.cnblogs.com/linhaitai/p/10038983.html
Copyright © 2020-2023  润新知