C语言中删除重复字母,删除C ++中的重复字母
假設我們有一個僅包含小寫字母的字符串。我們必須刪除所有重復的字母,以便所有字母僅出現一次。并且我們必須以最小的字典順序顯示結果。因此,如果輸入像“ abccb”,那么結果將是“ abc”
為了解決這個問題,我們將遵循以下步驟-ans:=一個空字符串
定義一個堆棧st
在大小為26的onStack上定義一個數組
定義一張映射
n:= s的大小
用于初始化i:= 0,當i
用于初始化i:= 0,當i
從st刪除項目
跳到下一個迭代,忽略以下部分
定義一個數組x = s,其大小為i
遞減m [x] 1
如果onStack [x-'a']不為零,則
當st不為空且x
將x插入st
onStack [x-'a']:= true
當(st為空)為false時,執行-x:= st的頂部元素
從st刪除項目
ans = ans + x
反轉陣列轉速
返回ans
示例
讓我們看下面的實現以更好地理解-#include?
using?namespace?std;
void?print_vector(vector?v){
cout?<
for(int?i?=?0;?i
cout?<
}
cout?<
}
class?Solution?{
public:
string?removeDuplicateLetters(string?s)?{
string?ans?=?"";
stack??st;
vector??onStack(26);
map??m;
int?n?=?s.size();
for(int?i?=?0;?i?
m[s[i]]++;
}
for(int?i?=?0;?i?
char?x?=?s[i];
m[x]--;
if(onStack[x?-?'a'])continue;
while(!st.empty()?&&?x?
onStack[st.top()?-?'a']?=?false;
st.pop();
}
st.push(x);
onStack[x?-?'a']?=?true;
}
while(!st.empty()){
char?x?=?st.top();
st.pop();
ans?+=?x;
}
reverse(ans.begin(),?ans.end());
return?ans;
}
};
main(){
Solution?ob;
cout?<
}
輸入項“abccb”
輸出結果“abc”
總結
以上是生活随笔為你收集整理的C语言中删除重复字母,删除C ++中的重复字母的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 走进小程序【九】微信小程序【云开发】
- 下一篇: 深度学习在情感分类中的应用