316. Remove Duplicate Letters

Total Accepted: 2367 Total Submissions: 12388 Difficulty: Medium

Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.

Example:

Given "bcabc"
Return "abc"

Given "cbacdcbc"
Return "acdb"

class Solution {
public:
string removeDuplicateLetters(string s) {
int size = s.size(); vector<int> vec_cnts(,); for(int i=; i<size ;++i){
vec_cnts[s[i]-'a']++;
} string res ; int res_ch_pos = -; for(int i=; i<size; ++i){
if(vec_cnts[s[i]-'a'] == ){
continue;
} if(vec_cnts[s[i]-'a'] != ) {
vec_cnts[s[i]-'a']--;
continue;
} char ch = s[i] ;
int ch_pos = i;
int j = i-; while(j > res_ch_pos ){//从后往前找到最前边小于ch的字符,若是没找到小于的字符,则找最前边等于ch的字符
if(s[j] > ch || vec_cnts[s[j]-'a'] == ) {
--j;
continue;
}
if(s[j] < ch){//小于
ch = s[j];
ch_pos = j;
}else{//相等
ch_pos = j;
}
--j;
} res.push_back(s[ch_pos]);//把找到的字符加入结果集 vec_cnts[s[ch_pos]-'a'] = ;//该字符已经使用,下次不能再使用了 res_ch_pos = ch_pos;//更正当前结果中,最后一个字符所在的位置 if(res_ch_pos < i){//如果结果字符在i之前,下次仍从i开始往前找
i -= ;
}
} return res;
}
};
/*
"bbbacacca" */

Remove Duplicate Letters的更多相关文章

  1. [LeetCode] Remove Duplicate Letters 移除重复字母

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  2. 316. Remove Duplicate Letters

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  3. Remove Duplicate Letters I & II

    Remove Duplicate Letters I Given a string which contains only lowercase letters, remove duplicate le ...

  4. LeetCode Remove Duplicate Letters

    原题链接在这里:https://leetcode.com/problems/remove-duplicate-letters/ 题目: Given a string which contains on ...

  5. leetcode@ [316] Remove Duplicate Letters (Stack & Greedy)

    https://leetcode.com/problems/remove-duplicate-letters/ Given a string which contains only lowercase ...

  6. [Swift]LeetCode316. 去除重复字母 | Remove Duplicate Letters

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  7. Remove Duplicate Letters(Java 递归与非递归)

    题目介绍: Given a string which contains only lowercase letters, remove duplicate letters so that every l ...

  8. 【lintcode】834. Remove Duplicate Letters

    题目描述: Given a string which contains only lowercase letters, remove duplicate letters so that every l ...

  9. 316. Remove Duplicate Letters (accumulate -> count of the difference elements in a vector)

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

随机推荐

  1. TaobaoProtect.exe,Alipaybsm.exe进程删除----让流氓软件滚粗

    可能经常上网的朋友都会有这样的经历,只要你上过一次淘宝,那么阿里会给你的电脑自动下载一个TaobaoProtect.exe的程序,这是支付宝安全控件,名为安全控件,实际上它会在后台搜集用户数据和信息, ...

  2. hdu 1099 Lottery

    这是我第一次写博客,作为一个ACMer,经常进别人的博客,所以自己也想写写博客. HDU 1099 Lottery Time Limit: 2000/1000 MS (Java/Others)     ...

  3. fddd

    <script language="JavaScript" type="text/javascript"> function exportChart ...

  4. SSE2 Intrinsics各函数介绍[转]

    SIMD相关头文件包括: //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#i ...

  5. POJ2485 最小生成树

    问题:POJ2485 本题求解生成树最大边的最小值 分析: 首先证明生成树最大边的最小值即最小生成树的最大边. 假设:生成树最大边的最小值比最小生成树的最大边更小. 不妨设C为G的一个最小生成树,e是 ...

  6. Asp.Net MVC+EF+三层架构的完整搭建过程

    架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...

  7. linux 安装mysqlServer

    先下载mysql安装包 打开 http://dev.mysql.com/downloads/mysql/  选择 linux - Generic 再选择*.tar.gz(最后那两个) 下载完毕后,得到 ...

  8. showModalDialog(转)

    基本介绍:          showModalDialog()         (IE 4+ 支持)          showModelessDialog()      (IE 5+ 支持)    ...

  9. setPixel抛出java.lang.IllegalStateException

    原来,从ImageView里读取的Bitmap,或者加载drawable里的图片资源,返回的都是一个immutalbe的bitmap,所以不能用setpixels 必须采取类似Bitmap bmp = ...

  10. How To Compile Qt with Visual Studio 2010

    This post is a step-by-step guide on how to compile Qt 4.x.x with MSVC 2010. Although we use Qt 4.7. ...