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

2024-01-27 10:28

本文主要是介绍844.比较含退格的字符串(力扣LeetCode),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

844.比较含退格的字符串

题目描述

给定 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) 的空间复杂度解决该问题吗?

erase函数

// 定义一个解决方案类
class Solution {
public:// 定义一个公共成员函数来比较两个字符串 s 和 tbool backspaceCompare(string s, string t) {// 调用 my_erase 对字符串 s 进行处理my_erase(s);// 调用 my_erase 对字符串 t 进行处理my_erase(t);// 如果处理后的 s 和 t 相等,返回 trueif(s == t) return true;// 否则返回 falsereturn false;}private:// 定义一个私有成员函数 my_erase,以引用方式接收字符串 str 并在原地修改void my_erase(string& str){// 遍历字符串 strfor(int i = 0; i < str.size(); ++i){// 如果当前字符是退格符 #if(str[i] == '#')// 如果不位于字符串的开始位置if(i != 0){// 删除前一个字符和当前的 # 字符str.erase(i - 1, 2);// 将索引 i 向后移动两个位置,以重新检查新的当前位置的字符i -= 2;}else{// 如果位于字符串的开始位置,只删除 # 字符str.erase(i, 1);// 将索引 i 向后移动一个位置i -= 1;}}}
};

双指针

class Solution {
public:bool backspaceCompare(string s, string t) {// 初始化两个指针分别指向字符串 s 和 t 的末尾int i=s.size()-1,j=t.size()-1;// 初始化两个变量用来记录需要退格的字符数int nums=0, numt=0;// 遍历两个字符串直到所有字符都被比较过while(i>=0||j>=0){// 在 s 中找到下一个应该比较的字符while(i>=0){//如果遇到退格符,增加 s 中需要跳过的字符数,并且指针向前移动if(s[i]=='#')   nums++, i--;// 如果有字符需要跳过,减少需要跳过的字符数,并且指针向前移动else if(nums>0) nums--, i--;// 找到了应该比较的字符,跳出循环else break;}// 在 t 中找到下一个应该比较的字符while(j>=0){if(t[j]=='#')   numt++,j--;else if(numt>0) numt--,j--;else break;}// 比较 s 和 t 中的字符,如果字符不同,返回 falseif(i>=0&&j>=0&&s[i]!=t[j])return false;// 如果一个字符串结束而另一个没有结束,也返回 falseif ((i >= 0) != (j >= 0))//相当于if(i>=0&&j<0||j>=0&&i<0)return false;// 移动指针准备比较下一对字符i--,j--;}// 所有字符都匹配,返回 truereturn true;}
};

这篇关于844.比较含退格的字符串(力扣LeetCode)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/649953

相关文章

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1