6.比较含退格的字符串(力扣字符串)(两种解法:字符串操作,栈)

2024-04-28 11:28

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

目录

题目链接

法一:普通字符串操作

法二:栈操作


题目链接

. - 力扣(LeetCode)

法一:普通字符串操作

用len1记录目前s的字符个数,len2记录目前t的字符个数

如果不是#,则s[len1] = s[i]

如果是#,则len1--(也就是#不放入,且上一个放入的字符会被下一个字符覆盖)

//法一:普通字符串操作
class Solution
{
public:bool backspaceCompare(string s, string t){if (s.size() == 0 && t.size() == 0)return true;int len1 = 0, len2 = 0;for (int i = 0; i < s.size(); i++){if (s[i] == '#'){//如果是#,则len1--(也就是#不放人,且上一个放入的字符会被下一个字符覆盖)if (len1 > 0)len1--;}else{//如果不是#,则s[len1] = s[i]s[len1] = s[i];len1++;}}s[len1] = '\0';for (int i = 0; i < t.size(); i++){if (t[i] == '#'){if (len2 > 0)len2--;}else{t[len2] = t[i];len2++;}}t[len2] = '\0';cout << s << endl << t << endl;if (len1 != len2)return false;if (len1 == 0 && len2 == 0)return true;int j = 0;for (int i = 0; i < len1; i++, j++){if (s[i] != t[j])return false;}return true;}
};

法二:栈操作

如果不是#,则将该元素入栈

如果是#,弹出栈顶(#前面的字符被弹出),注意:栈为空的时候不可弹栈

最后将s和t改为栈内元素,注意栈的后进先出的特性


//法二:栈class Solution{public:bool backspaceCompare(string s, string t){if (s.size() == 0 && t.size() == 0)return true;stack<char>st1, st2;int len1, len2;int count = s.size();//记录s最后的字符个数for (int i = 0; i < s.size(); i++){if (s[i] != '#'){//如果不是#,则将该元素入栈                 st1.push(s[i]);}else{//如果是#,弹出栈顶,注意:栈为空的时候不可弹栈if (!st1.empty()){//减去# 和 #前面的那个字符占的字符数count -= 2;st1.pop();}else{//减去#占的字符数count--;}}}if (count == 0){s = "";len1 = 0;}else{//栈后进先出,所以倒着更新for (int i = count - 1; i >= 0; i--){s[i] = st1.top();st1.pop();}len1 = count;}count = t.size();for (int i = 0; i < t.size(); i++){if (t[i] != '#'){st2.push(t[i]);}else{if (!st2.empty()){//减去# 和 #前面的那个字符占的字符数count -= 2;st2.pop();}else{//减去 # 占的字符数count--;}}}if (len1 != count)return false;if (count == 0){t = "";len2 = 0;}else{for (int i = count - 1; i >= 0; i--){t[i] = st2.top();st2.pop();}len2 = count;}if (len1 != len2)return false;if (len1 == 0 && len2 == 0)return true;int j = 0;for (int i = 0; i < len1; i++, j++){if (s[i] != t[j])return false;}return true;}};

这篇关于6.比较含退格的字符串(力扣字符串)(两种解法:字符串操作,栈)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco