【leetcode每日刷题】316. 去除重复字母

https://leetcode-cn.com/problems/remove-duplicate-letters/

使用三个数据结构:map存放字符出现的最后位置;set存放栈中的非重复字符;stack存放结果的可能序列。

1、将多有字符出现的最后位置放入map中

2、遍历字符串,如果遍历的序列中已经将字符放入栈中,则比较栈顶元素的序列,否则直接放入,已经在栈中的元素已经是最小字典序列。

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Stack;
class Solution {
    public String removeDuplicateLetters(String s) {
        Stack stack = new Stack<>();
        HashSet set = new HashSet<>();
        Map map = new HashMap<>();
        for(int i=0; i c && map.get(stack.peek()) > i){
                    set.remove(stack.pop());
                }
                stack.push(s.charAt(i));
                set.add(s.charAt(i));
            }
        }
        StringBuilder sb = new StringBuilder(stack.size());
        for(Character c : stack) sb.append(c.charValue());
        return sb.toString();
    }
}

 

你可能感兴趣的:(java,leetcode刷题)