2024-06-22力扣每日一题

链接:

2663. 字典序最小的美丽字符串

题意

要求字符串内不存在任何长度为 2 或更长的回文子字符串,则在任意位置不存在aaaba形式

由于要被给定字符串字典序大,且找到符合条件的字典序最小字符串,则竟可能对靠后的字符做加法和进位

莽一波一直处理最后一个字符,寄的理所当然哈哈

因为默认给的是符合无回文的字符串,所以没被更改过的字符都不考虑,从最靠前的被修改过的字符开始判断它和前面是否构成回文,如果回文则字符加一,如不回文则处理靠后的字符。

代码很丑陋,看看注释得了

实际代码:

c++ 复制代码
#include<bits/stdc++.h>
using namespace std;
string smallestBeautifulString(string s, int k)
{
    int lg=s.length(),mao=lg-1,zt=1;

    while(true)
    {
        if(zt)//第一次无条件执行 
        {
            s[mao]++;
        }
        
        if(mao>1)
        {
            if(s[mao]==s[mao-1] || s[mao]==s[mao-2])
            {
                while(s[mao]==s[mao-1] || s[mao]==s[mao-2]) s[mao]++;//有回文则++
            }
            else if(!zt) mao++;//无回文则处理后面的字符
        }
        else if(mao>0)
        {
            if(s[mao]==s[mao-1])
            {
                while(s[mao]==s[mao-1]) s[mao]++;
            }
            else if(!zt) mao++;
        }
        else if(!zt) mao++;
        if(zt) zt=0;
        
        //cout<<"mao:"<<mao<<endl; 
        if(mao>=lg) break;
        
        //cout<<"s[mao]:"<<s[mao]<<endl; 
        while(s[mao]-'a'+1>k)//进位则需要处理新的字符
        {
            s[mao]-=k;
            mao--;
            if(mao<0) return "";//首字符还进位则无符合条件字符串
            else s[mao]++;
        }
    }
    
    return s;
}
int main()
{
    string s;
    int k;
    
    cin>>s>>k;
    
    string ans=smallestBeautifulString(s,k);
    cout<<ans<<endl;
    return 0;
}

限制:

  • 1 <= n == s.length <= 105
  • 4 <= k <= 26
  • s 是一个美丽字符串
相关推荐
NAGNIP8 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队9 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja13 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下13 小时前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶13 小时前
算法 --- 字符串
算法
博笙困了14 小时前
AcWing学习——差分
c++·算法
NAGNIP14 小时前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP14 小时前
大模型微调框架之LLaMA Factory
算法
echoarts14 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Python技术极客14 小时前
一款超好用的 Python 交互式可视化工具,强烈推荐~
算法