C++ 程序生成长度为 n 的 Lyndon Words17 Mar 2025 | 4 分钟阅读 在本文中,我们将讨论一个用于生成长度为 n 的 Lyndon 词的 C++ 程序。在进行实现之前,我们必须了解 Lyndon 词。 什么是 Lyndon 词?Lyndon 词是非空字符串,其特点是按字典序小于其任何非平凡旋转。换句话说,Lyndon 词是小于其任何旋转(不包括其自身)的字符串。Lyndon 词因其此特性在字符串理论和组合学中至关重要。由于其独特的分解特性,它们对于算法、密码学、生物信息学和数据压缩的研究很重要。 示例-1输入 S[] = {0, 1} 且 n = 4 输出 0001 0011 0111 示例-2考虑整数集 {1,2,3}。 步骤-1:生成所有长度为 1 的可能词 1,2,3 步骤-2:生成所有长度为 2 的可能词 11,12,13,22,23,33 步骤-3:生成所有长度为 3 的可能词
结果以下是从数字 {1,2,3} 生成的长度为 3 的 Lyndon 词 111,112,113,222,223,333 算法步骤-1:使用 sort() 方法将字符数组按非递减顺序排列。 步骤-2:初始化一个名为“ch”的向量,用于存储数组中的字符索引。 步骤-3:通过将“-1”推入“ch”向量来表示初始索引。 步骤-4:利用 while 循环,迭代“ch”向量直到其大小大于零。 步骤-5:将“ch”向量中的最后一个索引增加 1。 步骤-6:将“ch”向量的长度存储在“ch_size”变量中。 步骤-7:如果“ch_size”等于“1”,则打印与“ch”向量中的索引对应的字符,以生成长度为“l”的 Lyndon 词。 步骤-8:重复将字符从“ch”向量本身附加到“ch”向量,直到“ch”向量的大小小于“l”。 步骤-9:如果“ch”向量的大小大于零且“ch”向量中的最后一个字符索引等于数组的最后一个索引,则将其从“ch”向量中删除。 示例让我们举一个例子来生成 C++ 中长度的 Lyndon 词。 输出 Please enter the length of the Lyndon words: 2 Please enter the length of the characters array: 3 Enter the characters separated by space: 0 1 2 The Lyndon words of length 2 are: 01 02 12 说明这个C++程序使用给定的字符数组 (C) 和特定长度 (arr_len) 来生成特定长度 (num_ber) 的 Lyndon 词。数组中的字符被排序,初始化一个向量来存储索引 (ch),并迭代所有可能的索引组合以生成词。当生成的词的大小与所需长度匹配时,它通过使用索引连接数组中的字符来创建词并打印结果。程序读取由空格分隔的字符,要求用户输入 Lyndon 词的长度和字符数组,然后执行 GeneratingLydonWords 函数,并提供输入以生成和打印 Lyndon 词。 复杂度分析
下一个主题C++ MCQ |
在本教程中,我们将学习如何在 C++ 中创建计时器。秒表在按下键盘上的任意键时开始,在按下另一个键之前不会结束。让我们学习如何在 C++ 中创建计时器。我们将使用一个名为...的函数。
阅读9分钟
在本文中,我们将讨论如何在 C++ 中找到最大乘积子数组。查找给定数组中正数和负数子数组的最大乘积。预计时间复杂度为 O(n),并且唯一可用的额外空间为 O(1)。示例:输入:arr[] =……
阅读 3 分钟
?在编程中拆分字符串是很常见的情况。在解决许多问题或优化程序时,程序员会遇到拆分字符串的情况。在 C++ 中有多种方法可以做到这一点。不同的方法将产生不同的时间和空间复杂度。本文将...
阅读 6 分钟
?在本文中,我们将讨论 C++ 中三角火柴数(Triangle Matchstick Number)的实现。但在了解其实现之前,我们必须了解三角火柴数。三角火柴数简介三角火柴数是一种有趣的数学好奇心,涉及将火柴排列成三角形……
阅读 3 分钟
在 C++ 和 Java 中,继承的目的是相同的。在这两种语言中,继承都用于代码重用和/或创建“is-a”关系。以下示例将展示 Java 和 C++ 在继承支持方面的差异。1) 在 Java 中,所有类...
阅读 3 分钟
引言:字符处理是 C 和 C++ 编程的一个基本方面,需要仔细考虑。Iswgraph() 是一个令人兴奋的函数,它有助于开发人员管理宽字符。该函数位于 wctype.h 头文件中,是字符分类的宝贵工具。在本文中,我们将...
5 分钟阅读
Set 是 C++ 中一种类似于数学中集合概念的容器。Set 与其他容器的不同之处在于它只包含不同的元素,并且可以按排序顺序进行遍历。对 Set 的良好理解对于...
阅读 6 分钟
合并重叠区间是计算科学、数学和调度、日历管理和数据分析等现实世界应用中的常见计算问题。目标是接受一组区间,每个区间代表一个值范围,然后合并...
18 分钟阅读
引言:在软件开发中,设计模式为常见编程问题提供了可重用的解决方案。工厂设计模式是面向对象编程中最常用的设计模式之一。工厂设计模式提供了创建对象的接口,尽管子类……
阅读 4 分钟
C++ 中的 Vector 是一种动态数组式容器,用于存储相同类型元素的集合。与数组不同,Vector 的大小可以动态增长或缩小,使其成为存储和操作数据的方便高效的数据结构。Vector 是……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India