问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4030 访问。

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

输入:S = "ab#c", T = "ad#c"

输出:true

解释:S 和 T 都会变成 “ac”。

输入:S = "ab##", T = "c#d#"

输出:true

解释:S 和 T 都会变成 “”。

输入:S = "a##c", T = "#a#c"

输出:true

解释:S 和 T 都会变成 “c”。

输入:S = "a#c", T = "b"

输出:false

解释:S 会变成 “c”,但 T 仍然是 “b”。

提示:

  • 1 <= S.length <= 200
  • 1 <= T.length <= 200
  • S 和 T 只含有小写字母以及字符 '#'。

Given two strings S and T, return if they are equal when both are typed into empty text editors. # means a backspace character.

Input: S = "ab#c", T = "ad#c"

Output: true

Explanation: Both S and T become "ac".

Input: S = "ab##", T = "c#d#"

Output: true

Explanation: Both S and T become "".

Input: S = "a##c", T = "#a#c"

Output: true

Explanation: Both S and T become "c".

Input: S = "a#c", T = "b"

Output: false

Explanation: S becomes "c" while T becomes "b".

Note:

  • 1 <= S.length <= 200
  • 1 <= T.length <= 200
  • S and T only contain lowercase letters and '#' characters.

示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4030 访问。

public class Program {

    public static void Main(string[] args) {
var S = "ab#c";
var T = "ad#c"; var res = BackspaceCompare(S, T);
Console.WriteLine(res); S = "a#c";
T = "b#cd"; res = BackspaceCompare2(S, T);
Console.WriteLine(res); Console.ReadKey();
} private static bool BackspaceCompare(string S, string T) {
var stackS = GetStack(S);
var stackT = GetStack(T);
if(stackS.Count != stackT.Count) return false;
for(var i = 0; i < stackS.Count; i++) {
if(stackS.ElementAt(i) != stackT.ElementAt(i))
return false;
}
return true;
} private static Stack<char> GetStack(string S) {
var stack = new Stack<char>();
foreach(var c in S) {
if(c == '#') {
if(stack.Count != 0) stack.Pop();
} else {
stack.Push(c);
}
}
return stack;
} private static bool BackspaceCompare2(string S, string T) {
var sb1 = GetStringBuilder(S);
var sb2 = GetStringBuilder(T);
return sb1.ToString() == sb2.ToString();
} private static StringBuilder GetStringBuilder(string S) {
var sb = new StringBuilder();
for(var i = 0; i < S.Length; ++i) {
if(S[i] == '#') {
if(sb.Length > 0) sb.Remove(sb.Length - 1, 1);
} else sb.Append(S[i]);
}
return sb;
} }

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4030 访问。

True
False

分析:

设 S 和 T 两个单词中最长的单词的字符数为 n,那么显而易见,以上2种算法的时间复杂度均为:  。

最新文章

  1. iOS开发UI篇—popoverController简单介绍
  2. 关于kindeditor中点击图片后,滚动条往上顶的bug
  3. java web开发 图片上传功能
  4. js正则函数
  5. dede导航设置成单页面内容
  6. 我的ubuntu
  7. hdu1520 (树形dp)
  8. php常用的优化手段
  9. Vue2 全家桶仿 微信App 项目,支持多人在线聊天和机器人聊天
  10. 201521123071 《JAVA程序设计》第七周学习总结
  11. 如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)
  12. 一个C#程序员学习微信小程序路由的笔记
  13. javascript小括号、中括号、大括号学习总结
  14. Python_socket常见的方法、网络编程的安全注意事项、socketsever模块、浏览器中在一段时间记录用户的登录验证机制
  15. eclipse 最最最常用快捷键
  16. LeetCode_Maximum Subarray | Maximum Product Subarray
  17. HTML5 ES6 语法基础
  18. 八、Java的可变参数例子
  19. nodejs --- 核心概念
  20. LeetCode:49. Group Anagrams(Medium)

热门文章

  1. oracle数据库备份还原命令
  2. 史上最全的 jmeter 获取 jdbc 数据使用的四种方法
  3. [C++面向对象]-C++成员函数和非成员函数
  4. CS231n 斯坦福李飞飞视觉识别课程
  5. 互联网找的e是无理数的初等证明
  6. 查询MySQL数据库中表结构
  7. vue -电子时钟
  8. Java进阶专题(十一) 想理解JVM看了这篇文章,就知道了!(中)
  9. Django学习路17_聚合函数(Avg平均值,Count数量,Max最大,Min最小,Sum求和)基本使用
  10. HTML 统一资源定位器(Uniform Resource Locators)