mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
添加 1047.删除字符串中的所有相邻重复项.md C语言版本
This commit is contained in:
@ -269,6 +269,57 @@ var removeDuplicates = function(s) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
C:
|
||||||
|
方法一:使用栈
|
||||||
|
```c
|
||||||
|
char * removeDuplicates(char * s){
|
||||||
|
//求出字符串长度
|
||||||
|
int strLength = strlen(s);
|
||||||
|
//开辟栈空间。栈空间长度应为字符串长度+1(为了存放字符串结束标志'\0')
|
||||||
|
char* stack = (char*)malloc(sizeof(char) * strLength + 1);
|
||||||
|
int stackTop = 0;
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
//遍历整个字符串
|
||||||
|
while(index < strLength) {
|
||||||
|
//取出当前index对应字母,之后index+1
|
||||||
|
char letter = s[index++];
|
||||||
|
//若栈中有元素,且栈顶字母等于当前字母(两字母相邻)。将栈顶元素弹出
|
||||||
|
if(stackTop > 0 && letter == stack[stackTop - 1])
|
||||||
|
stackTop--;
|
||||||
|
//否则将字母入栈
|
||||||
|
else
|
||||||
|
stack[stackTop++] = letter;
|
||||||
|
}
|
||||||
|
//存放字符串结束标志'\0'
|
||||||
|
stack[stackTop] = '\0';
|
||||||
|
//返回栈本身作为字符串
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
方法二:双指针法
|
||||||
|
```c
|
||||||
|
char * removeDuplicates(char * s){
|
||||||
|
//创建快慢指针
|
||||||
|
int fast = 0;
|
||||||
|
int slow = 0;
|
||||||
|
//求出字符串长度
|
||||||
|
int strLength = strlen(s);
|
||||||
|
//遍历字符串
|
||||||
|
while(fast < strLength) {
|
||||||
|
//将当前slow指向字符改为fast指向字符。fast指针+1
|
||||||
|
char letter = s[slow] = s[fast++];
|
||||||
|
//若慢指针大于0,且慢指针指向元素等于字符串中前一位元素,删除慢指针指向当前元素
|
||||||
|
if(slow > 0 && letter == s[slow - 1])
|
||||||
|
slow--;
|
||||||
|
else
|
||||||
|
slow++;
|
||||||
|
}
|
||||||
|
//在字符串结束加入字符串结束标志'\0'
|
||||||
|
s[slow] = 0;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
|
Reference in New Issue
Block a user