给你⼀个仅包含⼩写字⺟的字符串,请你去除字符串中重复的字⺟,使得每个字⺟只出现⼀次。需保证返回结果的字典序最⼩,要求不能打乱其他字符的相对位置

    示例:

    输⼊:”bcabc”
    输出:”abc”

    输⼊:”cbacdcbc”
    输出:”acdb”

    要求:

    开发语言不限,注意:如果是高级语言,针对比较大小,仅允许数字或字符的比较,不允许直接使用字符串比较

    例如:

    s1 = “xxx”,s2=“xxx”;

    if(s1 < s2) {

    }
    else {

    }

    以上示例代码不符合要求

    1. class Solution2 {
    2. func derepeatString(_ s: String) -> String {
    3. var newStr = s;
    4. var stack_c = [Character]()
    5. //cbgafhbaccccba
    6. for c in s {
    7. //去掉当前字符的str
    8. newStr.removeFirst();
    9. if stack_c.count == 0 {
    10. stack_c.append(c)
    11. continue;
    12. }
    13. if !stack_c.contains(c) {
    14. for c2 in stack_c {
    15. if stack_c.last! > c && newStr.contains(stack_c.last!){
    16. //栈顶的字符大于当前字符时,如果后面还会出现,则删除栈顶字符,当前字符入栈
    17. stack_c.removeLast()
    18. if stack_c.count == 0 {
    19. stack_c.append(c)
    20. break
    21. }
    22. }else{
    23. stack_c.append(c)
    24. break
    25. }
    26. }
    27. }
    28. }
    29. return String(stack_c)
    30. }
    31. }