forked from AllAlgorithms/cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
remove-adjacent-duplicates.cpp
65 lines (56 loc) · 1.92 KB
/
remove-adjacent-duplicates.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// C/C++ program to remove all adjacent duplicates from a string
#include <iostream>
#include <string.h>
using namespace std;
// Recursively removes adjacent duplicates from str and returns
// new string. las_removed is a pointer to last_removed character
char* removeUtil(char *str, char *last_removed)
{
// If length of string is 1 or 0
if (str[0] == '\0' || str[1] == '\0')
return str;
// Remove leftmost same characters and recur for remaining
// string
if (str[0] == str[1])
{
*last_removed = str[0];
while (str[1] && str[0] == str[1])
str++;
str++;
return removeUtil(str, last_removed);
}
// At this point, the first character is definiotely different
// from its adjacent. Ignore first character and recursively
// remove characters from remaining string
char* rem_str = removeUtil(str+1, last_removed);
// Check if the first character of the rem_string matches with
// the first character of the original string
if (rem_str[0] && rem_str[0] == str[0])
{
*last_removed = str[0];
return (rem_str+1); // Remove first character
}
// If remaining string becomes empty and last removed character
// is same as first character of original string. This is needed
// for a string like "acbbcddc"
if (rem_str[0] == '\0' && *last_removed == str[0])
return rem_str;
// If the two first characters of str and rem_str don't match,
// append first character of str before the first character of
// rem_str.
rem_str--;
rem_str[0] = str[0];
return rem_str;
}
char *remove(char *str)
{
char last_removed = '\0';
return removeUtil(str, &last_removed);
}
// Driver program to test above functions
int main()
{
char str1[] = ""; //Enter string
cout << remove(str1) << endl;
return 0;
}