NC318. 字符串的相邻字符去重
描述
示例1
输入:
"bcaac"
输出:
"b"
说明:
bcaac执行删除操作后变为bcc,再次执行删除操作变为b,此时不再符合删除条件故返回b。示例2
输入:
"ab"
输出:
"ab"
说明:
原串即不符合删除条件,故直接返回。示例3
输入:
"bcaaac"
输出:
"bcac"
说明:
bcaaac执行删除操作后变为 bcac ,此时不再符合删除条件C 解法, 执行用时: 4ms, 内存消耗: 440KB, 提交时间: 2022-06-27
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 * * C语言声明定义全局变量请加上static,防止重复定义 */ char* removeDuplicates(char* s ) { int left = 0, right = 1; while(s[right] != '\0'){ //printf("left=%d, right=%d\n", left, right); if(s[left] == s[right]){ s[left] = s[right+1]; left--; } else{ left++; s[left] = s[right]; //删除字符,left字符后面字符变乱,比较过的字符,必须把右边的字符移动到左边 } right++; } s[left+1] = '\0'; return s; }
C 解法, 执行用时: 4ms, 内存消耗: 440KB, 提交时间: 2022-06-19
char* removeDuplicates(char* s ) { int x = 1, y = 0; while (s[x] != '\0') { if (y < 0) s[y = 0] = s[x++]; else { if (s[x] == s[y]) { y--; x++; } else s[++y] = s[x++]; } } s[++y] = '\0'; return s; }
C 解法, 执行用时: 4ms, 内存消耗: 520KB, 提交时间: 2022-04-07
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 * * C语言声明定义全局变量请加上static,防止重复定义 */ char* removeDuplicates(char* s ) { // write code here int i = 1, j = 0; while(s[i] != '\0'){ if(j < 0) s[j=0] = s[i++]; else{ if(s[i] == s[j]){ j--; i++; } else s[++j] = s[i++]; } } s[++j] = '\0'; return s; }
C++ 解法, 执行用时: 4ms, 内存消耗: 520KB, 提交时间: 2022-03-05
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ string removeDuplicates(string s) { string res; stack<char> st; int len=s.size(); for(int i=0;i<len;i++) { if(st.empty()) st.push(s[i]); else{ if(st.top()==s[i]) { st.pop(); }else st.push(s[i]); } } while(!st.empty()) { res.push_back(st.top()); st.pop(); } reverse(res.begin(), res.end()); return res;// write code here } };
C++ 解法, 执行用时: 4ms, 内存消耗: 524KB, 提交时间: 2022-08-02
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ string removeDuplicates(string s) { // write code here string result; for (char c:s) { if (result.empty() || result.back()!=c) { result.push_back(c); } else result.pop_back(); } return result; } };