leetcode 打卡第一天
一个十分简单的字符串删减题,碰到多个坑
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入:abbaca
输出:ca
题意理解运行就是先将"bb"删除,得到字符串"aaca",然后再进行判断删除相邻的"aa",得到"ca",由于"ca'相邻没有相同的字符,所以即为最终结果.
编程试运行问题
(1) 首先是循环问题,只判断了一个循环,没有将删除原先相邻字符得到的字符串进行整合,然后再一次进行判定是否存在相邻的字符.
(2) 在考虑到上面这个问题之后,"aaaaaa"字符串最后面两个"aa"却被忽视,还是循环设置的不对.
总的来说面对这种删除问题,字符串的长度每一次都会跟着变化,就需要设置两个辅助空间,一个定义为没有改变之前的字符串长度,一个设置为改变之后的长度,然后设置循环条件,如果两个长度不相等就表示还没有得到最终结果.
class Solution {
public:
string removeDuplicates(string S) {
int now=S.length();
int next=1;
while(now!=next)//现在的字符串长度不等于下一次去除之后的长度
{
now=S.length();
for(int i=0;i<now;i++){
if(S[i]==S[i+1])S.erase(i,2);
}
next=S.length();
}
return S;
}
};
leetcode 的刷题首重逻辑,逻辑搞清楚了再去解决问题,否则会出很多的bug.