• CSL 的字符串(思维+STL操作)


    链接:https://ac.nowcoder.com/acm/contest/551/D
    来源:牛客网
     

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 524288K,其他语言1048576K
    64bit IO Format: %lld

    题目描述

    CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助。
     

    给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件:

    • 原字符串中出现的字符,新字符串也必须包含。
    • 新字符串中所有的字符均不相同。
    • 新字符串的字典序是满足上面两个条件的最小的字符串。

    输入描述:

    
     

    仅一行,有一个只含有可打印字符的字符串 s。

    |s|≤105|s|≤105

    输出描述:

    在一行输出字典序最小的新字符串。

    示例1

    输入

    复制

    bab

    输出

    复制

    ab

    示例2

    输入

    复制

    baca

    输出

    复制

    bac

    备注:

    ASCII字符集包含 94 个可打印字符(0x21 - 0x7E),不包含空格。

    思路:我们开一个记录数量的容器和标记数组,然后对string进行操作,注意string的str.end()-1是最后一个元素,也可以用str.rbegin()代替,如果我们当前的字符容器的最后一个有大于要插入的,并且后面还有这个字符,那我们就把这个字符给舍弃,

    并且把这个字符的标记给更新,然后在原串的基础上加就好了

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<map> 
    #include<set>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<cmath>
    
    
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    vector<int>vec(255,0);
    bool vis[255];
    string str;
    int main()
    {
    	cin>>str;
        memset(vis,false,sizeof(vis));
    	string::iterator it;
    	for(it=str.begin();it!=str.end();it++)
    	{
    		vec[*it]++;
    	}
    	string ans="";
    	for(it=str.begin();it!=str.end();it++)
    	{
    		
    		vec[*it]--;
    		if(vis[*it]==true)
    		{
    			continue;
    		}
    		while(vec[*(ans.end()-1)]&&*it<*(ans.end()-1))
    		{	
    			vis[*ans.rbegin()]=false;
    			ans.erase(ans.end()-1);
    		}
    		ans+=*it;
    		vis[*it]=true;
    	}
    	cout<<ans<<endl;
    	
    	return 0;
    }
  • 相关阅读:
    每天一个linux命令(权限):【转载】chgrp命令
    每天一个linux命令(权限):【转载】chmod命令
    每天一个linux命令(文件上传下载文件操作):【转载】gzip命令
    jsplumb 常用事件
    MarkDown
    el-menu 菜单展示
    sourcetree的使用
    git
    LTE FDD EPC网络规划设计与优化(“十二五”国家重点图书出版规划项目)
    详解UG NX9.0标准教程
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781769.html
Copyright © 2020-2023  润新知