Leetcode 316 Remove Duplicate Letters
开始刷题,记录一下分析过程和编码中的问题
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;
}