小红的字符串构造

题目描述:

小红希望你构造一个长度为n的、仅包含小写字母的字符串,其中恰好有k个长度大于1的回文子串。你能帮帮她吗?



思路分析 :非常感谢题目告诉我们k是小于n/2,这样我可以枚举了,样例1告诉我们类似于"aaa"形式的字符字串的回文数3,我们不妨就以这个作为解题的桥梁,如果k=3,回文串是aaa,k=6,回文串aaabbb,k=7,回文串aaabbbcc,k=8,回文串aaabbbccdd

格式我们确定好了,进行细致分析:

我们不难看出,k如果不是3的倍数,余数要么1要么是2,我们就可以把最后两种情况用yy和zz来表示:
特别的 :当k==0的时候直接a~z无限循环就可以了

cpp 复制代码
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int n,k;
int main()
{
    cin>>n>>k;
    int num1=k/3;
    //表示一下可以有几组aaa,bbb的格式
    int num11=num1;
    int num2=k%3;//表示余数
    int num22=num2;
    if(k==0){
   //特殊情况**
        char c='a';
        for(int i=0;i<n;i++){
            cout<<c;c++;
            if(c>'z')  c='a'; }
        return 0;//直接结束
    }
    else
    {
        char c='a';
        while(num1--)
        {
        	//开始输出xxx格式
            cout<<c<<c<<c;    
            c++;
            if(c=='y')//留下y和z后面作为余数部分使用
                c='a';
        }
        if(num2==1) cout<<"zz";
        if(num2==2)cout<<"yyzz";
        char b=c;//从c开始,防止出现字符重复现象
        for(int i=3*num11+num22*2;i<n;i++)
        //补齐后面的部分使数的个数到达n
        {
            cout<<b;//
            b++;
            if(b>'z')
                b='a';
        } 
    }
    return 0;
}
相关推荐
左手の明天8 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
海上小飞龙8 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂8 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i8 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
乐迪信息10 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
无名猿10 小时前
shared_ptr 完全指南:引用计数、控制块与开销
c++·性能优化·内存管理·标准库·现代c++
Sirens.10 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕11 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
tangguofeng11 小时前
不带头结点的链队操作集(不含InitFlag)(C语言版)
算法