C++ 程序对给定字符串流中的同位词进行分组28 Aug 2024 | 5 分钟阅读 变位词 (anagram) 是通过重新排列另一个词的字母而形成的词,例如 “listen” 和 “silent”。要在每个字符串流中对变位词进行分组,我们需要将所有互为变位词的字符串组合在一起。 示例 1一个使用哈希表对变位词进行分组的 C++ 代码片段 输出 bat tan nat eat tea ate 在此实现中,我们首先创建一个无序映射 hashTable,其中键是排序后的字符串,值是互为变位词的字符串向量。之后,我们遍历输入向量 strs 中的每个字符串,对字符串进行排序以形成一个键,并将其添加到哈希表中。最后,我们清空输入向量 "strs",并遍历哈希表,将变位词组附加到 strs 中。 在 C++ 中,还有其他方法可以对字符串流中的变位词进行分组。一种方法是使用一个由 pair 组成的向量,将排序后的字符串作为 pair 的第一个元素,原始字符串作为 pair 的第二个元素。之后,我们可以根据排序后的字符串对此 pair 向量进行排序,这样变位词就会彼此相邻。最后,我们可以提取原始字符串并将它们存储在一个单独的向量中。 示例 2这是该方法的实现 输出 bat ate eat tea nat tan 在此实现中,我们首先创建一个由 pair 组成的向量 sortedStrs,其中每个 pair 的第一个元素是排序后的字符串,第二个元素是原始字符串。之后,我们遍历输入向量 strs 中的每个字符串,对字符串进行排序以形成排序后的字符串,并将该 pair 添加到 sortedStrs 中。我们使用 std::sort() 根据排序后的字符串对 sortedStrs 进行排序,该函数会根据 pair 的第一个元素按字典序对它们进行排序。最后,我们清空输入向量 "strs",并遍历 sortedStrs 来提取每个 pair 的第二个元素并将其附加到 "strs" 中。 该方法的时间复杂度为 O(N * M * log M),其中 N 是输入向量中的字符串数量,M 是最长字符串的长度。空间复杂度为 O(N * M),因为我们需要为每个输入字符串存储排序后的字符串。 示例 3另一种实现方式是使用计数排序方法 输出 bat tan nat eat tea ate 在此实现中,我们首先创建一个无序映射 map,其中键是根据字符串中每个字符的计数排序后的字符串,值是具有相同排序后字符串的原始字符串向量。之后,我们遍历输入向量 strs 中的每个字符串,使用一个计数数组 count 统计每个字符的频率,并通过将每个字符的计数与 "#" 分隔符连接来构造键。我们将原始字符串插入到 map 中对应键的值向量中。最后,我们清空输入向量 strs,并遍历 map 来提取值向量并将其元素附加到 strs 中。 还有其他几种方法,例如
所有这些方法都有各自的优缺点,最佳方法取决于输入向量的大小、字符串的长度以及可用的内存。 下一个主题C++ 中的 cstdlib |
引言:随着信息时代的到来,产生了海量数据。由于需要保护人们的隐私,保护敏感信息变得越来越重要。因此,信息在网络传输和系统内存存储过程中受到保护的方式...
11 分钟阅读
一个简单的 C++ 应用程序,称为学生管理系统,被教育机构用来处理学生数据以及学校中与学生相关的许多其他数据需求。用户可以在这个学生管理系统项目中创建、查看和编辑内容。如今,数据库在每个...
阅读27分钟
排序是计算机科学中的一项基本操作,并在 QuickSort 中得到了充分体现。Quicksort 是一种分而治之的算法,以其效率而闻名。将 QuickSort 扩展到链表是一项有用的技能,尽管它通常应用于数组。在本文中,我们将深入探讨...
5 分钟阅读
在本文中,您将学习 C++ 流状态及其示例。C++ 流状态:C++ 中的输入/输出流保留一个状态,该状态表示流在不同操作后的状态。一组标志,每个标志都指定一个不同的条件,用于表示状态。在常用的标志中...
阅读 4 分钟
概述 tolower C++ 函数定义在 cctype 头文件中。tolower C++ 方法在将大写字符输入函数时,将大写字母转换为相应的小写字母。语法:我们将使用以下语法在 C++ 程序中使用 tolower()...
阅读 3 分钟
在本文中,我们将讨论 C++ 中的 std::ios::bad() 函数,包括其语法和示例。std::ios 类是 C++ 中每个标准输入/输出流的根类。它提供了许多标志来指示流的当前状态,其中一个标志是...
阅读 2 分钟
什么是斐波那契数列 斐波那契数列是下面显示的整数序列。0、1、1、2、3、5、8、13、21、34、55、89、144…… 递推关系在数学上定义了斐波那契数列 Fn。Fn = Fn-1 + Fn-2,其种子值为 F0...
阅读 2 分钟
异常处理是创建可靠软件的重要组成部分。它使我们能够优雅地应对程序运行时可能发生的意外情况。由于 C++ 强大的异常处理框架,开发人员可以精确地处理各种异常类型。在本文中,...
阅读 4 分钟
当 C++ 编译器遇到它不理解的语句或表达式,或者它没有按照语言规则正确编写时,它通常会产生“Expected unqualified id”错误。“expected unqualified id”错误在 C++ 中通常表示编译器遇到了一个情况...
阅读 4 分钟
系统编程、游戏开发和高性能应用程序是 C++ 作为一种健壮且适应性强的编程语言广泛应用的众多领域。开发人员经常使用集成开发环境 (IDE),它提供高级工具和功能来简化开发过程,以利用...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India