Leetcode 316

来源:互联网 发布:网络热敏打印机 编辑:程序博客网 时间:2024/04/19 21:11

Leetcode 316 Remove Duplicate Letters

开始刷题,记录一下分析过程和编码中的问题

Created with Raphaël 2.1.0开始未到s末尾取s中一个newCharnewChar未标记?取栈顶oldCharnewChar>oldChar?newChar压栈结束s中oldChar不在newChar后出现?oldChar出栈yesnoyesnoyesnoyesno
string stringStack;bool isMarked(char ch){    int markedSz=stringStack.length();    if(markedSz==0)        return false;     else{        for(int i=0; i<markedSz; i++)        {            if(stringStack.at(i)==ch)                return true;        }        return false;    }}char getStringStackTop(){    int markedSz=stringStack.length();    if(markedSz==0)        return '\0';    else        return stringStack.at(markedSz-1);}void push(char ch){    stringStack = stringStack + ch;}char pop(){    char topChar=getStringStackTop();    if(topChar=='\0')        return topChar;    else{        stringStack=stringStack.substr(0,stringStack.length()-1);        return topChar;    }        }bool appearAfter(string s, char ch, int location){    int sz=s.length();    if(location >= sz){        cout<<"error location"<<endl;        return false;    }    else{        for(int i=location; i<sz; i++){            if(ch==s.at(i)){                return true;            }        }        return false;    }}string removeDuplicateLetters(string s) {    if(s.length()==0)        return s;    int sz=s.length();    char newChar;    char oldChar;    for(int i=0; i<sz; i++){        if(isMarked(s.at(i)));        else{            newChar=s.at(i);            oldChar=getStringStackTop();            while(oldChar!='\0'){                if(newChar < getStringStackTop()){                    if(appearAfter(s,oldChar,i)){                        pop();                        oldChar=getStringStackTop();                    }                    else{                        oldChar='\0';                    }                }                else                    oldChar='\0';            }            push(newChar);        }    }    return stringStack;}
0 0
原创粉丝点击