LeetCode—316 Remove Duplicate Letters

来源:互联网 发布:九二五网络 编辑:程序博客网 时间:2024/06/15 22:02

思路:建立26个List存储每个字母的位置,然后每次读取一个字母出来,并且维护这26个list

public class Solution {List<List<Integer>> totalList=new ArrayList<List<Integer>>();int index=-1;    public String removeDuplicateLetters(String s) {        if (s==null||s.length()==0) {return "";}        char[] chars=s.toCharArray();        for (int i = 0; i < 26; i++) {        List<Integer> list=new ArrayList<Integer>();        totalList.add(list);}        for (int i = 0; i < chars.length; i++) {int k=chars[i]-97;totalList.get(k).add(i);}        int count=0;        for (int i = 0; i < 26; i++) {if (totalList.get(i).size()!=0) {count++;}}        char[] ans=new char[count];        for (int i = 0; i < count; i++) {ans[i]=f();}        return String.valueOf(ans);    }    public char f(){    int min=Integer.MAX_VALUE;    for (int i = 0; i < 26; i++) {    if (totalList.get(i).size()!=0) {int k=totalList.get(i).get(totalList.get(i).size()-1);if (k<min) {min=k;}}}    for (int i = 0; i < 26; i++) {    if (totalList.get(i).size()!=0) {    int val=totalList.get(i).get(0);    if (val<=min&&val>index) {    totalList.set(i, new ArrayList<Integer>());    index=val;    for (int j = 0; j < 26; j++) {if (totalList.get(j).size()!=0) {List<Integer> list=totalList.get(j);for (int k = 0; k < list.size();) {if (list.get(0)<index) {list.remove(0);}else {break;}}}}    return (char)(i+97);    }}}return 0;    }}


0 0
原创粉丝点击