res_str_adj_remove.c (1292B)
| // 3561. Resulting String After Adjacent Removals
#include "leetcode.h"
/*
* you are given a string 's' consisting of lowercase english letters. you must
* repeatedly perform the following operation while the string 's' has at least
* two consecutive characters: remove the leftmost pair of adjacent characters
* in the string that are consecutive in the alphabet, in either order, and
* shift the remaining characters to the left to fill the gap. return the
* resulting string after no more operations can be performed. note: consider
* the alphabet as circular, thus 'a' and 'z' are consecutive.
*/
bool helper(char a, char b) {
int c = fabs(a - b);
return c == 1 || c == 25;
}
char *resultingString(char *s) {
int n = strlen(s), top = -1;
char *ans = (char *)malloc((n + 1) * sizeof(char));
for (int i = 0; i < n; i++) {
if (top >= 0 && helper(ans[top], s[i]))
top--;
else
ans[++top] = s[i];
}
ans[top + 1] = '\0';
return ans;
}
int main() {
char *s1 = "abc", *rs1 = resultingString(s1);
char *s2 = "adcb", *rs2 = resultingString(s2);
char *s3 = "zadb", *rs3 = resultingString(s3);
printf("%s\n", rs1); // expect: c
printf("%s\n", rs2); // expect: null
printf("%s\n", rs3); // expect: db
free(rs1);
free(rs2);
free(rs3);
}
|