Open youngyangyang04 opened 5 months ago
class Solution {
public String removeDuplicates(String S) {
Stack<Character> st = new Stack<>();
for (char s : S.toCharArray()) {
if (st.isEmpty() || s != st.peek()) {
st.push(s);
} else {
st.pop();
}
}
StringBuilder sb = new StringBuilder();
while (!st.isEmpty()) {
sb.append(st.pop());
}
return sb.reverse().toString();
}
}
java代码越来越搞笑了 之前就发现了 有的时候没必要early stop的时候偏偏要写上几句多余的if,有时明明思路里面都写了要early stop了然后代码总是漏掉,这次更是经典 ,reverse都不写都可以堂而皇之的贴上去,你也不看看自己的代码能跑通样例吗
java直接用StringBuilder不是最快吗
c语言
#define LEN 100000
typedef struct{
int size;
int top;
char array[LEN];
} stack;
int isempty(stack *mystack)
{
if(mystack->top==0)
{
return 1;
}
return 0;
}
int isfull(stack *mystack)
{
if(mystack->top>=mystack->size)
{
return 1;
}
return 0;
}
void pushstack(stack *mystack,char val)
{
if(isfull(mystack))
{
return;
}
mystack->array[mystack->top++]=val;
}
char popstack(stack *mystack)
{
if(isempty(mystack))
{
return ' ';
}
return mystack->array[--mystack->top];
}
char peekstack(stack *mystack)
{
if(isempty(mystack))
{
return ' ';
}
return mystack->array[mystack->top-1];
}
char* removeDuplicates(char* s) {
stack *mystack=(stack*)malloc(sizeof(stack));
mystack->size=LEN;
mystack->top=0;
int len=strlen(s);
for(int i=0;i<len;i++)
{
if(isempty(mystack))
{
pushstack(mystack,s[i]);
continue;
}
if(peekstack(mystack)==s[i])
{
popstack(mystack);
}
else{
pushstack(mystack,s[i]);
}
}
mystack->array[mystack->top]='\0';
strcpy(s,mystack->array);
free(mystack);
return s;
}
java最快的一集,用静态数组模拟栈。
class Solution {
public String removeDuplicates(String s) {
char[] cs = s.toCharArray();
char[] stack = new char[s.length()];
int i = -1; //i时刻指向栈顶
for(char c : cs){
if(i >= 0 && stack[i] == c)
i--;
else
stack[++i] = c;
}
return new String(stack, 0, i + 1);
}
}
https://programmercarl.com/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.html