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