IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 1405最长快乐字符串 -> 正文阅读

[数据结构与算法]1405最长快乐字符串

题目描述:

如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。

给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:

s 是一个尽可能长的快乐字符串。
s 中 最多 有a 个字母 'a'、b?个字母 'b'、c 个字母 'c' 。
s 中只含有 'a'、'b' 、'c' 三种字母。
如果不存在这样的字符串 s ,请返回一个空字符串 ""。

示例:

输入:a = 1, b = 1, c = 7
输出:"ccaccbcc"
解释:"ccbccacc" 也是一种正确答案。
输入:a = 1, b = 1, c = 7
输出:"ccaccbcc"
解释:"ccbccacc" 也是一种正确答案。
输入:a = 7, b = 1, c = 0
输出:"aabaa"
解释:这是该测试用例的唯一正确答案。

解答描述:

因为题目要求找出一个尽可能长的快乐字符串,考虑贪心策略。

贪心策略如下:

1)因为快乐字符串的要求是不能有三个及以上的连续相同字符,最多两个连续,那就每次选择当前数量最多的来连续。

2)为了将连续的字符隔开,需要另一种字符作为隔开符,选择当前数量第二多的来隔开。?

3)当没有可用于隔开的字符时,说明此时已经是最长的快乐字符串了,结束贪心,返回结果。

?注意:需要额外记录每次用的隔开符,因为有可能隔开符对应的字符数目在下轮是最多的,此时,它最多还只能再放一个,而不是两个。eg:4 4 3。

代码:

typedef struct {
    int num;//a,b,c的数值
    char cc;//对应字符'a','b','c'
}mystruct;
int max(int x,int y)
{
    return x>y?x:y;
}
int comp(const void*a,const void*b)//比较函数
{
    return ((mystruct*)b)->num - ((mystruct*)a)->num;
}
char * longestDiverseString(int a, int b, int c){
    char *ans=(char*)malloc(sizeof(char) * (a+b+c+1));

    mystruct st[3];//用结构表示字符
    st[0].num=a; st[0].cc='a'; 
    st[1].num=b; st[1].cc='b'; 
    st[2].num=c; st[2].cc='c'; 

    int k=0;
    char prev='0';
    while(1)
    {
        qsort(st,3,sizeof(st[0]),comp);
        int round=(prev==st[0].cc)?1:0;//如果当前数目最多的之前出现过,现在只能再放一个
        while(st[0].num>0 && round<2)//先放当前数目最多的额
        {
            ans[k++]=st[0].cc;
            st[0].num--;
            round++;
        }
        if(st[1].num>0)//当还有隔开符时,用一个隔开
        {
            ans[k++]=st[1].cc;
            st[1].num--;
            prev=st[1].cc;//记录当前字符串的最后一个字符
        }
        else
        {
            break;
        }
    } 
    ans[k]='\0';
    return ans;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 01:25:36  更:2022-02-19 01:27:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:37:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码