首页 > 其他分享 >力扣844. 比较含退格的字符串

力扣844. 比较含退格的字符串

时间:2023-04-24 23:11:32浏览次数:35  
标签:字符 844 -- else 力扣 遍历 字符串 退格

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

 

示例 1:

输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。
示例 2:

输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 ""。
示例 3:

输入:s = "a#c", t = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。
 

提示:

1 <= s.length, t.length <= 200
s 和 t 只含有小写字母以及字符 '#'
 

进阶:

你可以用 O(n) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/backspace-string-compare
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

bool backspaceCompare(char * s, char * t){
    int i = strlen(s) - 1, j = strlen(t) - 1; // 从后往前遍历字符串
    int skipS = 0, skipT = 0; // 记录退格字符的数量

    while (i >= 0 || j >= 0) { // 当两个字符串中至少有一个未遍历完
        while (i >= 0) { // 处理字符串 s
            if (s[i] == '#') { // 遇到退格字符,增加计数器
                skipS++, i--;
            } else if (skipS > 0) { // 遇到非退格字符且计数器大于零,跳过该字符
                skipS--, i--;
            } else {
                break;
            }
        }
        while (j >= 0) { // 处理字符串 t,同理
            if (t[j] == '#') {
                skipT++, j--;
            } else if (skipT > 0) {
                skipT--, j--;
            } else {
                break;
            }
        }
        if (i >= 0 && j >= 0) { // 如果两个字符串都未遍历完,比较当前字符是否相等
            if (s[i] != t[j]) {
                return false;
            }
        } else { // 如果有一个字符串已经遍历完,判断另一个字符串是否也遍历完
            if (i >= 0 || j >= 0) {
                return false;
            }
        }
        i--, j--; // 继续向前遍历
    }
    return true;
}

 

标签:字符,844,--,else,力扣,遍历,字符串,退格
From: https://www.cnblogs.com/wlxdaydayup/p/17351281.html

相关文章

  • DIA-48448: This command does not support multiple ADR homes
    在使用adrci命令清空日志时遇到错误:“DIA-48448:ThiscommanddoesnotsupportmultipleADRhomes”如何解决呢?如下所示$ adrciADRCI: Release 19.0.0.0.0 - Production on Mon Apr 24 17:13:32 2023Copyright (c) 1982, 2019, Oracle and/or its affiliate......
  • 力扣977(Java)-有序数组的平方(简单)
    题目:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,......
  • 力扣 435. 无重叠区间
    435.无重叠区间给定一个区间的集合 intervals ,其中 intervals[i]=[starti,endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。示例1:输入:intervals=[[1,2],[2,3],[3,4],[1,3]]输出:1解释:移除[1,3]后,剩下的区间没有重叠。示例2:输入:int......
  • 力扣844(Java)-比较含退格的字符串(简单)
    题目:给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。 示例1:输入:s="ab#c",t="ad#c"输出:true解释:s和t都会变成"ac"。示例2:输入:s="ab##",t="c#d#"输出:true......
  • 【力扣-TS解题】1、回文数
    给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是来源:力扣(LeetCode)转为字符串把数字转为字符串反转整个字符串对比两个字符串functionisPalindrome(x:number):b......
  • 力扣---238. 除自身以外数组的乘积
    给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32位整数范围内。请不要使用除法,且在 O(n)时间复杂度内完成此题。 示例1:输......
  • 力扣——554砖墙(c语言)
    title:力扣——554砖墙(c语言)题目描述:你的面前有一堵矩形的、由多行砖块组成的砖墙。这些砖块高度相同但是宽度不同。你现在要画一条自顶向下的、穿过最少砖块的垂线。砖墙由行的列表表示。每一行都是一个代表从左至右每块砖的宽度的整数列表。如果你画的线只是从砖块的边......
  • 力扣——6.动态规划
    title:动态规划6、最长上升子序列(1)采用动态规划,算法复杂度为O(n*n)intlengthOfLIS(int*nums,intnumsSize){inti,j,max=1;if(NULL==nums||0==numsSize){return0;}int*dp=(int*)malloc(numsSize*sizeof(int));memset(dp,0,nu......
  • 力扣——21.合并两个有序链表(c语言)
    title:力扣——21.合并两个有序链表(c语言)将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4,1->3->4输出:1->1->2->3->4->41、递归实现:/***Definitionforsingly-linkedlist.*structListNode{......
  • 力扣——83.删除排序链表中的重复元素(c语言)
    title:力扣——83.删除排序链表中的重复元素(c语言)题目描述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入:1->1->2输出:1->2示例2:输入:1->1->2->3->3输出:1->2->3代码如下:/***Definitionforsingly-linkedlist.*structListNode{*......