力扣2182.构造限制重复的字符串

这篇具有很好参考价值的文章主要介绍了力扣2182.构造限制重复的字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 思路:先记录每个字符的出现次数,构建一个新字符串,从尾取字符,每取一个该字符个数-1,若该字符已经取到有repeatLimit个,则递归取次大的字符,并对应字符个数-1,若没有次大字符了,则直接返回

力扣2182.构造限制重复的字符串,力扣刷题笔记,leetcode,算法,职场和发展,c++

代码:

class Solution {
public:

    bool lastchar(string &s, vector<int>& alphabet, int i){    //递归找次大字符
        if(--i == -1) return false;    //没有返回false
        if(alphabet[i] != 0){    
            alphabet[i]--;    //找到了对应字符个数-1
            s += i + 'a';    //取出字符
            return true;    //有返回true
        }
        return lastchar(s, alphabet, i);
    }

    string repeatLimitedString(string s, int repeatLimit) {
        vector<int> alphabet(26);    //记录每个字母个数
        for(auto letter : s)    //记录
            alphabet[letter - 'a']++;

        string newstr = "";    //存储结果
        for(int i = 25; i >= 0; --i){
            if(alphabet[i] != 0){
                int count = 0;    //记录当前字符取了几个了
                while(alphabet[i]){    //取完当前字符为止
                    if(count == repeatLimit){    //若已经取到repeatLimit个
                        if(!lastchar(newstr,alphabet,i)){    //找次大字符,若没有直接返回结果
                            return newstr;
                        }
                        count = 0;    //重置取了几个
                    }
                    alphabet[i]--;    //没有取到repeatLimit个则对应字符个数-1
                    ++count;    //取值个数+1
                    newstr += i + 'a';    //取出字符
                }
            }
            
        }
        
        return newstr;
    }
};

 文章来源地址https://www.toymoban.com/news/detail-789324.html

到了这里,关于力扣2182.构造限制重复的字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【leetcode 力扣刷题】字符串翻转合集(全部反转///部分反转)

    题目链接:344. 反转字符串 题目内容: 题目中重点强调了必须 原地修改 输入数组,即不能新建一个数组来完成字符串的反转。我们注意到: 原来下标为0的,反转后是size - 1【原来下标是size - 1的,反转后是0】; 原来下标是1的,反转后是size - 2【原来下标是size -2的,反转后

    2024年02月11日
    浏览(46)
  • 【leetcode 力扣刷题】字符串匹配之经典的KMP!!!

    以下是能用KMP求解的算法题,KMP是用于字符串匹配的经典算法【至今没学懂………啊啊啊】 题目链接:28. 找出字符串中第一个匹配项的下标 题目内容: 题意还是很好理解的,要在字符串haystack中查找一个完整的needle,即字符串匹配。 暴力求解就是用 两层循环 :haystack从第

    2024年02月09日
    浏览(42)
  • 力扣_字符串10—重复的DNA序列

    DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。 例如,“ACGAATTCCG” 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中 出现不止一次 的 长度为 10 的序列(子字符串)。你可以按 任

    2024年02月19日
    浏览(31)
  • 【力扣·每日一题】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)

    题目链接 给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效 。 提示: 1 = w o r d . l e n g t h = 50 1 = word.length = 50 1 = w or d . l e n g t h = 50 w

    2024年01月16日
    浏览(51)
  • 算法刷题-字符串-重复的子字符串

    KMP算法还能干这个 力扣题目链接 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 示例 1: 输入: “abab” 输出: True 解释: 可由子字符串 “ab” 重复两次构成。 示例 2: 输入: “aba” 输出: False 示

    2024年02月09日
    浏览(53)
  • 力扣_字符串7—交错字符串

    给定三个字符串 s 1 、 s 2 、 s 3 s1、s2、s3 s 1 、 s 2 、 s 3 ,请你帮忙验证 s 3 s3 s 3 是否是由 s 1 s1 s 1 和 s 2 s2 s 2 交错 组成的。 两个字符串 s s s 和 t t t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s = s 1 + s 2 + . . . + s n s = s1 + s2 + ... + sn s = s 1

    2024年02月20日
    浏览(76)
  • 力扣_字符串1—字符串转整数

    请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果

    2024年01月17日
    浏览(43)
  • (字符串 ) 459. 重复的子字符串——【Leetcode每日一题】

    难度:简单 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s = “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s = “aba” 输出: false 示例 3: 输入: s = “abcabcabcabc” 输出: true 解释: 可由子串 “abc” 重复四次构

    2024年02月07日
    浏览(48)
  • KMP-重复子字符串

    Problem: 459. 重复的子字符串 给定一个字符串str1, 判断其是否由重复的子串构成。 例子1:输入 str1=‘ababab’ ;输出 true 例子2:输入 str1=‘ababac’ ;输出 false 重复子字符串组成的字符串,其肯定存在一个后缀和前缀是一样的,并且这个后缀其由后缀前面的字符子串组成。所以

    2024年01月25日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包