G题题解

根据题意顺序: 先判断连续相同,在判断递增,最后判断递减,三种都不符合则直接放入原先的字符 注意: 长度必须要大于2 if(j>i)

标准程序代码如下:

#include <bits/stdc++.h>
using namespace std;
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
typedef vector<vector<int>> mat;
using pii = pair<int, int>;
using pdd = pair<double,double>;
constexpr int N = 2e5 + 10;

void solve()
{
    string s,ans="";
    cin>>s;
    int n=s.size();
    for(int i=0;i<n;i++)
    {
        int j=i;//备份一下,方便后续统计个数
        while(s[j]==s[j+1]&& j+1<n) j++;//判断相同个数
        if(j>i)
        {
            ans+=s[i];
            //加上当前数字,以及中间数字
            ans+=to_string(j-i+1);
            i=j;
            continue;//继续下一轮
        }
        while(s[j]+1==s[j+1]&& j+1<n) j++;//判断递增个数
        if(j>i)
        {
            ans+=s[i];
            //加上当前数字,左括号右括号,以及中间数字
            ans+='('+to_string(s[j]-s[i])+')';
            i=j;
            continue;//继续下一轮
        }
        while(s[j]-1==s[j+1]&& j+1<n) j++;//判断递减个数
        if(j>i)
        {
            ans+=s[i];
            //加上当前数字,左括号右括号,以及中间数字
            ans+='('+to_string(s[j]-s[i])+')';
            i=j;
            continue;//继续下一轮
        }
        //无法满足以上三条
        ans+=s[i];
    }
    cout<<ans<<'\n';
    cout<<(ans.size()<s.size()?"YES":"NO")<<"\n";
}
signed main()
{
    IOS;
    int _= 1;
    //cin >> _;
    while(_--)
    {
        solve();
    }
    return 0;
}

0 条评论

目前还没有评论...