删除多余的字符得到字典序最小的字符串

https://www.nowcoder.com/practice/611d16ddd5344bfdb76c22306247dcf3tpId=101&tqId=33189&tPage=1&rp=1&ru=/ta/programmer-code-interview-guide&qru=/ta/programmer-code-interview-guide/question-ranking

题目描述

给一个全是小写字母的字符串str,删除多余字符,使得每种字符只保留一个,并且让最终结果字符串字典序最小。

输入描述:

输入包含一行字符串,代表str(1≤length(str)​≤10^5)。

输出描述:

输出一行,代表删除后的字符串。

示例1

输入

acbc

输出

abc

输入

dbcacbca

输出

dabc

备注:

时间复杂度O(n),额外空间复杂度O(1)。
//O(n*k) k==26 ---> O(n)  O(1)
#include
using namespace std;
int main(){
    string s;
    cin>>s;
    int c[26]={0};    //用于统计字符个数
    int vis[26]={0};  //用于标识是否访问过 
    for(int i=0;i0 && res.back()>s[i]){
            vis[res.back()-'a']=0;
            res.pop_back();
        }
        res+=s[i];        //res尾部加上s[i]
        vis[s[i]-'a']=1;  //s[i]已访问
    }
    cout<

 

你可能感兴趣的:(面试指南,字符串)