去trend笔试也是这个题目。不过比这个简单。。不过这个题目以前看过了,没仔细看,笔试的时候自己把之给想出来了。
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入
”They are students.”
和
”aeiou”
,则删除之后的第一个字符串变成
”Thy r stdnts.”
一个字符串中删除。但如何能够把效率优化到让人满意的程度,却也不是一件容易的事情。也就是说,如何在第一个字符串中删除一个字
符,以及如何在第二字符串中查找一个字符,都是需要一些小技巧的。
首先我们考虑如何在字符串中删除一个字符。由于字符串的内存分配方式是连续分配的。我们从字符串当中删除一个字符,需要把后面所有的字符往前移动一个字节
的位置。但如果每次删除都需要移动字符串后面的字符的话,对于一个长度为
n
的字符串而言,删除一个字符的时间复杂度为
O(n)
。而对于本题而言,有可能要
删除的字符的个数是
n
,因此该方法就删除而言的时间复杂度为
O(n2)
。
事实上,我们并不需要在每次删除一个字符的时候都去移动后面所有的字符。我们可以设想,当一个字符需要被删除的时候,我们把它所占的位置让它后面的字符来
填补,也就相当于这个字符被删除了。在具体实现中,我们可以定义两个指针
(pFast
和
pSlow)
,初始的时候都指向第一字符的起始位置。当
pFast
指向的字符是需要删除的字符,则
pFast
直接跳过,指向下一个字符。如果
pFast
指向的字符是不需要删除的字符,那么把
pFast
指向的字符赋值给
pSlow
指向的字符,并且
pFast
和
pStart
同时向后移动指向下一个字符。这样,前面被
pFast
跳过的字符相当于被删除了。用这种方法,整个删
除在
O(n)
时间内就可以完成。
接下来我们考虑如何在一个字符串中查找一个字符。当然,最简单的办法就是从头到尾扫描整个字符串。显然,这种方法需要一个循环,对于一个长度为
n
的字符串,时间复杂度是
O(n)
。
由于字符的总数是有限的。对于八位的
char
型字符而言,总共只有
28=256
个字符。我们可以新建一个大小为
256
的数组,把所有元素都初始化为
0
。然
后对于字符串中每一个字符,把它的
ASCII
码映射成索引,把数组中该索引对应的元素设为1。这个时候,要查找一个字符就变得很快了:根据这个字符的
ASCII
码,在数组中对应的下标找到该元素,如果为
0
,表示字符串中没有该字符,否则字符串中包含该字符。此时,查找一个字符的时间复杂度是
O(1)
。
其实,这个数组就是一个
hash
表。
分享到:
相关推荐
在C#编程语言中,处理字符串是常见的任务之一,其中包括删除字符串中的特定部分或子字符串。本篇文章将详细探讨如何在C#中实现这一功能,包括多种方法和实用技巧。 首先,C#提供了多种内置方法来操作字符串,比如`...
将“删除字符”函数拖放到前面板,设置输入为你的字符串,将“要删除的字符”设置为32,输出就是没有空格的新字符串。 3. **计算字符长度**: 计算字符串的字符长度,可以使用“字符串长度”函数。将该函数拖放到...
例如,`字符串替换`函数可以用来查找并替换掉指定的字符或字符串,`字符串删除`函数则能帮助我们移除字符串中的某个部分。 源码可能包含了以下关键步骤: 1. 定义字符串变量:首先,你需要创建一个变量来存储待...
2. **子字符串删除**:对于删除特定子串,`Replace()`方法同样适用。假设我们想删除包含"World"的部分: ```csharp s = s.Replace("World", ""); ``` 现在`s`变成了"Hello, !"。 3. **字符数组与遍历**:若需更复杂...
在易语言中,有时我们需要处理字符串信息,尤其是对于程序的优化和资源管理,删除无用字符串信息是一项重要的任务。本文将深入探讨如何使用易语言进行字符串清理,以及涉及的API函数BeginUpdateResourceA、...
在Java编程语言中,字符串处理是一项基础且重要的任务。在这个特定的场景中,我们需要创建一个Applet程序,它能够接收用户输入的字符串和一个字符,...但上述代码仍然展示了如何在Applet环境中处理字符串删除的操作。
初学者常常会遇到如何在特定位置删除字符串中的某个部分。在Delphi7中,这可以通过多种方法实现,包括使用内置的字符串函数、正则表达式或者自定义的逻辑。本文将详细讲解如何在指定位置删除一个字符串。 首先,...
“C语言字符串操作:删除串s2里包含的所有字符” 在C语言中,字符串操作是非常重要的一部分,本篇文章将介绍如何编写一个函数,删除字符串s1中包含的所有字符,这些字符也出现在字符串s2中。 在这个函数中,我们...
根据提供的文件信息,本文将详细解释“C语言删除字符串中指定的所有字符”的实现方法与原理。此代码示例提供了一种高效的方法来移除字符串中的特定字符,并且已经在Windows和Linux环境下进行了测试验证。 ### 一、...
去掉重复的字符串及在第一个字符串中删除在第二个字符串中出现的字符两个程序,vs2013已经验证
字符串的子串删除问题 在本文中,我们探讨了Codeforces Round #452 (Div. 2) F题的两种解决方案。该问题的关键点在于字符串的子串删除问题。 1. 问题描述 给定一个长度为n的字符串和m次操作,每次操作给出两个...
2. 字符串处理:在本例中,我们需要实现从字符串中删除指定的字符,这需要使用字符串处理技术。在Java语言中,我们可以使用String类的split()方法来将字符串分割成数组,然后使用StringBuilder类来将数组中的元素...
java接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印新生成的字符串。
### 数据结构程序删除字符串中几个字符 #### 一、背景介绍 在计算机科学中,字符串是一种常见的数据类型,用于表示一系列字符。对于字符串的操作非常重要,包括但不限于字符串的创建、读取、修改和删除等。本篇文章...
字符串问题在计算科学中占有重要的地位,涉及字符处理的各种算法和数据结构。常见的字符串处理包括查找、替换、连接、插入和删除等基本操作,而更深入的算法如最长公共子序列(LCS)和最长公共子串(LIS)则是研究字符串...
但是实际提供的代码片段似乎与描述不符,这段代码主要涉及到的是一个Web应用程序中的数据录入功能,特别是向数据库插入考试题目(Test_Questions)的过程,并未直接涉及数据结构或字符串删除的具体实现。不过,我们...
### MATLAB 删除字符与比较字符数组和字符串 #### 概述 在 MATLAB 中处理文本数据时,经常需要执行一些基本操作,如删除特定字符或比较不同的字符数组和字符串。本文档将详细介绍如何使用 `strrep` 函数删除字符...
从字符串中删除字符 这是c#中常用的,希望对你们有帮助
`cropString` 函数的描述表明它是一个用于删除字符串中指定部分的程序。在这个函数中,`src` 是原始字符串的指针,`begin` 和 `end` 分别表示需要删除的子串的起始和结束位置。下面我们将深入探讨这个主题,包括字符...
本文将深入探讨如何以逗号或其他自定义分隔符来添加或删除字符串,并且会强调不支持正则表达式中的特殊字符。我们将通过实例代码和步骤来详细解释这一过程。 首先,让我们理解“以逗号分隔方式添加字符串”。当你有...