国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【力扣·每日一題】2182.構(gòu)造限制重復(fù)的字符串(模擬 貪心 優(yōu)先隊(duì)列 C++ Go)

這篇具有很好參考價(jià)值的文章主要介紹了【力扣·每日一題】2182.構(gòu)造限制重復(fù)的字符串(模擬 貪心 優(yōu)先隊(duì)列 C++ Go)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目鏈接

題意

給你一個(gè)字符串 s 和一個(gè)整數(shù) repeatLimit ,用 s 中的字符構(gòu)造一個(gè)新字符串 repeatLimitedString ,使任何字母 連續(xù) 出現(xiàn)的次數(shù)都不超過 repeatLimit 次。你不必使用 s 中的全部字符。

返回 字典序最大的 repeatLimitedString 。

如果在字符串 a 和 b 不同的第一個(gè)位置,字符串 a 中的字母在字母表中出現(xiàn)時(shí)間比字符串 b 對(duì)應(yīng)的字母晚,則認(rèn)為字符串 a 比字符串 b 字典序更大 。如果字符串中前 min(a.length, b.length) 個(gè)字符都相同,那么較長(zhǎng)的字符串字典序更大。
提示:

1 < = r e p e a t L i m i t < = s . l e n g t h < = 1 0 5 1 <= repeatLimit <= s.length <= 10^5 1<=repeatLimit<=s.length<=105
s 由小寫英文字母組成

思路

貪心的構(gòu)造

  • 每次將當(dāng)前剩余的字典序最大的字符添加到答案里,如果該字符已經(jīng)連續(xù)出現(xiàn)了repeatLimit 次,則先將當(dāng)前剩余的字典序次大的字符添加到答案里,再繼續(xù)將當(dāng)前剩余的字典序最大的字符添加到答案里,直到該最大的字符用完或是沒有次大的字符可以插入

有兩種寫法

  1. 多層for循環(huán),不斷嘗試填入新字符
    • 結(jié)合上述的思路可以得知,每個(gè)字符i最多被添加min(repeatLimit,mp[i])次,其中mp[i]為字符i的出現(xiàn)次數(shù)
    • 可以先統(tǒng)計(jì)字符串s里每個(gè)字符的出現(xiàn)次數(shù)
    • 倒序進(jìn)行遍歷,這時(shí)候i里維護(hù)的就是當(dāng)前剩余的字典序最大的字符
    • 嘗試將字符i添加到答案字符串里
    • 如果i已經(jīng)填完了的話,跳出循環(huán),找下一個(gè)當(dāng)前剩余的字典序最大的字符
    • 否則的話找第一個(gè)存在且字典序次大的字符,插入到答案字符串里,這樣后面就可以繼續(xù)填字母i
  2. 使用優(yōu)先隊(duì)列維護(hù)字典序最大字符和次大字符
    • 思路1的本質(zhì)是通過for循環(huán)找當(dāng)前剩余的字典序最大/次大的字符,可以通過優(yōu)先隊(duì)列來維護(hù)

代碼

【力扣·每日一題】2182.構(gòu)造限制重復(fù)的字符串(模擬 貪心 優(yōu)先隊(duì)列 C++ Go),力扣,leetcode,c++,算法

func repeatLimitedString(s string, repeatLimit int) string {
	mp := make(map[rune]int, 26)
	for _, ch := range s {
		mp[ch]++
	}
	ans := make([]rune,0,len(s))
	for i := 'z'; i >= 'a'; i-- {//倒序填入字母
		las := i - 1//記錄次小的字母值
		for {
			for j := 0; j < repeatLimit && mp[i] > 0; j++ {//最多填入min(repeatLimit,mp[i])個(gè)字母i
				mp[i]--
				ans = append(ans, i)
			}
			if mp[i] == 0 {//i填完了 找下一個(gè)字典序最大的字母
				break
			}
			for las >= 0 && mp[las] == 0 {//找到第一個(gè)存在的字典序次大的字母
				las--
			}
			if las < 0 {//找不到 跳出
				break
			}
            //先填入次大字母 后面可以繼續(xù)填最大字母i
			mp[las]--
			ans = append(ans, las)
		}
	}
	return string(ans)
}

【力扣·每日一題】2182.構(gòu)造限制重復(fù)的字符串(模擬 貪心 優(yōu)先隊(duì)列 C++ Go),力扣,leetcode,c++,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-797953.html

class Solution {
	public:
		string repeatLimitedString(string s, int repeatLimit) {
			int mp[26];
			for(int i=0; i<26; i++) {
				mp[i]=0;
			}
			for(char ch:s) {
				mp[ch-'a']++;
			}
			string ans;
			for(int i=25; i>=0; i--) {
				int las = i-1;
				while(1) {
					for(int j=0; j<repeatLimit&&mp[i]>0; j++) {
						mp[i]--;
                        ans.push_back(i+'a');
                    	//ans = ans + char(i+'a');
					}
					if(mp[i]==0) {
						break;
					}
					while(las>=0&&mp[las]==0) {
						las--;
					}
					if(las < 0) {
						break;
					}
					mp[las]--;
                    ans.push_back(las+'a');
                //	ans = ans + char(las+'a');
				}
			}
			return ans;
		}
};

到了這里,關(guān)于【力扣·每日一題】2182.構(gòu)造限制重復(fù)的字符串(模擬 貪心 優(yōu)先隊(duì)列 C++ Go)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • (字符串 ) 459. 重復(fù)的子字符串——【Leetcode每日一題】

    (字符串 ) 459. 重復(fù)的子字符串——【Leetcode每日一題】

    難度:簡(jiǎn)單 給定一個(gè)非空的字符串 s ,檢查是否可以通過由它的一個(gè)子串重復(fù)多次構(gòu)成。 示例 1: 輸入: s = “abab” 輸出: true 解釋: 可由子串 “ab” 重復(fù)兩次構(gòu)成。 示例 2: 輸入: s = “aba” 輸出: false 示例 3: 輸入: s = “abcabcabcabc” 輸出: true 解釋: 可由子串 “abc” 重復(fù)四次構(gòu)

    2024年02月07日
    瀏覽(22)
  • 【力扣每日一題】2023.7.17 字符串相加

    【力扣每日一題】2023.7.17 字符串相加

    題面很簡(jiǎn)單,就是要將兩個(gè)字符串看作是數(shù)字然后相加,將最后結(jié)果轉(zhuǎn)為字符串返回即可. 看到這題我的第一反應(yīng)是直接轉(zhuǎn)成數(shù)字再相加再轉(zhuǎn)成字符串,像是這樣: 但這樣就不符合題目要求了( 這不是主要原因 )?,并且遇到大數(shù)就無法轉(zhuǎn)成整型也無法計(jì)算了. 所以需要像是我們列豎式

    2024年02月16日
    瀏覽(24)
  • 『力扣每日一題07』字符串最后一個(gè)單詞的長(zhǎng)度

    氣死我啦,今天這道題花了快一個(gè)小時(shí),我學(xué)完了答案的解法,放上去在線 OJ ,一直報(bào)錯(cuò),找來找去都找不到自己錯(cuò)在哪,明明跟答案一模一樣。后來還是學(xué)了另一種解法,才跑出來的(°????????o°????????) ? 后來我對(duì)比了兩種寫法,復(fù)盤了一下,應(yīng)該是第一種解法

    2024年02月09日
    瀏覽(30)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長(zhǎng)不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長(zhǎng)不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    難度:中等 請(qǐng)從字符串中找出一個(gè)最長(zhǎng)的不包含重復(fù)字符的子字符串,計(jì)算該最長(zhǎng)子字符串的長(zhǎng)度。 示例 1: 輸入: “abcabcbb” 輸出: 3 解釋: 因?yàn)闊o重復(fù)字符的最長(zhǎng)子串是 “abc”,所以其長(zhǎng)度為 3。 示例 2: 輸入: “bbbbb” 輸出: 1 解釋: 因?yàn)闊o重復(fù)字符的最長(zhǎng)子串是 “b”,所

    2024年02月11日
    瀏覽(26)
  • (棧和隊(duì)列) 1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng) ——【Leetcode每日一題】

    (棧和隊(duì)列) 1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng) ——【Leetcode每日一題】

    難度:簡(jiǎn)單 給出由小寫字母組成的字符串 S , 重復(fù)項(xiàng)刪除操作 會(huì)選擇兩個(gè)相鄰且相同的字母,并刪除它們。 在 S 上反復(fù)執(zhí)行重復(fù)項(xiàng)刪除操作,直到無法繼續(xù)刪除。 在完成所有重復(fù)項(xiàng)刪除操作后返回最終的字符串。答案保證唯一。 示例: 輸入 :“abbaca” 輸出 :“ca” 解釋

    2024年02月08日
    瀏覽(24)
  • 【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    2024-1-11 2645. 構(gòu)造有效字符串的最少插入數(shù) 方法一:計(jì)算組數(shù) 1.用count統(tǒng)計(jì),能構(gòu)成幾組abc 2.如果當(dāng)前字符大于之前字符,說明還在組內(nèi),不更新 3.如果當(dāng)前字符小于等于之前字符,說明不是同一組的abc,組數(shù)更新 4.最終返回值:組數(shù)*3,再減去原本的字符數(shù),就是要插入的次數(shù)

    2024年01月17日
    瀏覽(23)
  • 【力扣·每日一題】2085.統(tǒng)計(jì)出現(xiàn)過一次的公共字符串(模擬 哈希表 優(yōu)化 C++ Go)

    【力扣·每日一題】2085.統(tǒng)計(jì)出現(xiàn)過一次的公共字符串(模擬 哈希表 優(yōu)化 C++ Go)

    題目鏈接 給你兩個(gè)字符串?dāng)?shù)組 words1 和 words2 ,請(qǐng)你返回在兩個(gè)字符串?dāng)?shù)組中 都恰好出現(xiàn)一次 的字符串的數(shù)目。 輸入:words1 = [“l(fā)eetcode”,“is”,“amazing”,“as”,“is”], words2 = [“amazing”,“l(fā)eetcode”,“is”] 輸出:2 解釋: “l(fā)eetcode” 在兩個(gè)數(shù)組中都恰好出現(xiàn)一次,計(jì)入答

    2024年01月21日
    瀏覽(23)
  • 力扣每日一題82:刪除排序鏈表中的重復(fù)元素||

    力扣每日一題82:刪除排序鏈表中的重復(fù)元素||

    給定一個(gè)已排序的鏈表的頭? head ?,? 刪除原始鏈表中所有重復(fù)數(shù)字的節(jié)點(diǎn),只留下不同的數(shù)字 ?。返回? 已排序的鏈表 ?。 示例 1: 示例 2: 提示: 鏈表中節(jié)點(diǎn)數(shù)目在范圍? [0, 300] ?內(nèi) -100 = Node.val = 100 題目數(shù)據(jù)保證鏈表已經(jīng)按升序? 排列 通過次數(shù) 370.5K 提交次數(shù) 691.1K 通

    2024年02月08日
    瀏覽(18)
  • 每日一題——字符串變形

    題目 對(duì)于一個(gè)長(zhǎng)度為 n 字符串,我們需要對(duì)它做一些變形。 首先這個(gè)字符串中包含著一些空格,就像\\\"Hello World\\\"一樣,然后我們要做的是把這個(gè)字符串中由空格隔開的單詞反序,同時(shí)反轉(zhuǎn)每個(gè)字符的大小寫。 比如\\\"Hello World\\\"變形后就變成了\\\"wORLD hELLO\\\"。 需要考慮字符串結(jié)尾是空

    2024年02月13日
    瀏覽(21)
  • ( 字符串) 205. 同構(gòu)字符串 ——【Leetcode每日一題】

    ( 字符串) 205. 同構(gòu)字符串 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 給定兩個(gè)字符串 s 和 t ,判斷它們是否是同構(gòu)的。 如果 s 中的字符可以按某種映射關(guān)系替換得到 t ,那么這兩個(gè)字符串是同構(gòu)的。 每個(gè)出現(xiàn)的字符都應(yīng)當(dāng)映射到另一個(gè)字符,同時(shí)不改變字符的順序。不同字符不能映射到同一個(gè)字符上,相同字符只能映射到同一個(gè)

    2024年02月02日
    瀏覽(65)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包