您的位置:首页 > 其它

316. Remove Duplicate Letters

2016-04-15 13:09 218 查看
我一直以为本题复杂度要求为O(n),实际上,解法复杂度为O(n*n)的代码也可AC。

代码如下:

char* removeDuplicateLetters(char* s) {
char *ret = (*char) malloc(sizeof(char)*27);
int counts[26] = {0};
bool used[26] = { 0};
int len = 0;
for(int i=0;s[i]!='\0';++i)
{
if(used[s[i]-'a']==true) continue;
counts[s[i]-'a']--;
int j = len-1;
for(;j>=0;--j)
{
if(ret[j]>s[i]&&counts[s[j]-'a']>0) used[s[j]-'a']=false;
else break;
}
len = j+1;
ret[len++] = s[i];
used[s[i]-'a'] = true;
}
ret[len] = '\0';
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: