美文网首页
比较含退格的字符串

比较含退格的字符串

作者: WAI_f | 来源:发表于2020-07-06 01:10 被阅读0次

题目:

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。

示例:

输入:S = "ab#c", T = "ad#c"
输出:true
解释:S 和 T 都会变成 “ac”。

解题方法:

这道题要分两步处理,第一步处理‘#’,第二步比较字符串。
第一步稍微难点,思路就是用一个pose变量记录有效字符的位置:

如果当前字符串元素是'#',说明pose位置的元素会被消掉,所以pose--,另外需要注意pose不能小于0,就是多个'#'使得字符全被消掉了,这个时候pose应该在字符串开始的位置,也就是pose=0;
如果当前字符不是'#',那就是有效字符,就把pose位置赋值为当前字符,pose++移动到下一个位置;
最后字符串遍历完,还要在pose位置添加一个'\0',表示字符串结束。

第二步简单多了,循环比较两个字符串相同位置是否相同,相同返回true,反之返回false。需要注意的是不能直接用S==T进行比较,原因可能是S和T原始的size没有改变,循环遍历会越过'\0',不过这只是我的猜测,需要验证。

代码和结果:

class Solution {
public:
    void remainStr(string &a)
    {
        int pose=0;
        for(int i=0;i<a.size();i++)
        {
            if(a[i]!='#')
            {
                a[pose]=a[i];
                pose++;
            }
            else
            {
                pose--;
                if(pose<0)
                    pose=0;
            }
        }
        a[pose]='\0';
    }
    bool backspaceCompare(string S, string T) {
        remainStr(S);
        remainStr(T);
        int i=0;
        while(S[i]!='\0'&&T[i]!=0)
        {
            if(S[i]!=T[i])
                return false;
            i++;
        }
        
        if(S[i]=='\0'&&T[i]=='\0')
            return true;
        else
            return false;
        
    }
};
运行结果:

本题的解法还是比较好的,双百通过,没有使用额外的内存,全部的处理都在原数组上进行,另外处理过程也就遍历了一遍字符串,加比较字符串遍历,性能很赞。
这是我做的第150道Leetcode题目了,感觉进度还是可以的,两个多月时间,进步蛮大的,不过都是简单题,题目太多了, 简单题估计还要刷一个月才能刷个大概。

原题链接:https://leetcode-cn.com/problems/backspace-string-compare/

相关文章

网友评论

      本文标题:比较含退格的字符串

      本文链接:https://www.haomeiwen.com/subject/acdiqktx.html