昆明網(wǎng)站seo報(bào)價(jià)推廣普通話手抄報(bào)內(nèi)容大全資料
刪除字符串的經(jīng)典kotlin操作:
val mTemp = (temp.text).replace(Regex("℃"),"")
以下是題目!
1209.?刪除字符串中的所有相鄰重復(fù)項(xiàng) II
提示
中等
174
相關(guān)企業(yè)
給你一個(gè)字符串?s
,「k
?倍重復(fù)項(xiàng)刪除操作」將會(huì)從?s
?中選擇?k
?個(gè)相鄰且相等的字母,并刪除它們,使被刪去的字符串的左側(cè)和右側(cè)連在一起。
你需要對(duì)?s
?重復(fù)進(jìn)行無(wú)限次這樣的刪除操作,直到無(wú)法繼續(xù)為止。
在執(zhí)行完所有刪除操作后,返回最終得到的字符串。
本題答案保證唯一。
示例 1:
輸入:s = "abcd", k = 2 輸出:"abcd" 解釋:沒(méi)有要?jiǎng)h除的內(nèi)容。
示例 2:
輸入:s = "deeedbbcccbdaa", k = 3 輸出:"aa" 解釋: 先刪除 "eee" 和 "ccc",得到 "ddbbbdaa" 再刪除 "bbb",得到 "dddaa" 最后刪除 "ddd",得到 "aa"
示例 3:
輸入:s = "pbbcggttciiippooaais", k = 2 輸出:"ps"
提示:
1 <= s.length <= 10^5
2 <= k <= 10^4
s
?中只含有小寫英文字母。
通過(guò)次數(shù)
19.7K
提交次數(shù)
38.8K
通過(guò)率
50.8%
使用kotlin來(lái)解決:
可以使用棧來(lái)解決這個(gè)問(wèn)題。
首先定義一個(gè)數(shù)據(jù)類 CharWithCount
,用來(lái)表示字符和其出現(xiàn)的次數(shù)。然后遍歷字符串,對(duì)于每個(gè)字符,如果棧頂元素和當(dāng)前字符相同,就將棧頂元素出棧,將其出現(xiàn)次數(shù)加一,否則將當(dāng)前字符作為新的元素入棧。每次入棧或者出棧時(shí),要判斷棧頂元素出現(xiàn)次數(shù)是否達(dá)到了 k,如果是的話就將其出棧。
最后將棧中剩余的元素按順序拼接成字符串即可。
class Solution {data class CharWithCount(val char: Char, var count: Int)fun removeDuplicates(s: String, k: Int): String {val stack = mutableListOf<CharWithCount>()for (c in s) {if (stack.isNotEmpty() && stack.last().char == c) {val last = stack.last()last.count += 1if (last.count == k) {stack.remove(stack.last())}} else {stack.add(CharWithCount(c, 1))}}val sb = StringBuilder()for (c in stack) {sb.append(c.char.toString().repeat(c.count))}return sb.toString()}
}
使用C++來(lái)解決:
class Solution {typedef pair<char,int> PSI;
public:string removeDuplicates(string s, int k) {stack<PSI> st;for(auto c:s){if(!st.empty() && st.top().first==c){PSI temp=st.top();temp.second+=1;st.pop();if(temp.second<k){st.push(temp);}}else{st.push({c,1});}}string res="";while(!st.empty()){PSI temp=st.top();st.pop();for(int i=0;i<temp.second;i++){res+=temp.first;}}reverse(res.begin(),res.end());return res;}
};
對(duì)比學(xué)習(xí)著,kotlin的語(yǔ)法確實(shí)簡(jiǎn)潔很多。