字符串的全部子序列(递归)

简介: 在计算机科学中,子序列和子串的概念非常重要,这两个概念经常在数据处理,文本分析,编程算法等领域被广泛使用。理解子序列和子串的区别以及如何高效地处理它们对于成为一名有效的程序员是非常重要的。

      在计算机科学中,子序列和子串的概念非常重要,这两个概念经常在数据处理,文本分析,编程算法等领域被广泛使用。


      首先,让我们定义子序列和子串的概念。子串是原始字符串的一个连续的部分,而子序列则可以不连续。例如,对于字符串abc,它的子串包括abcabbcabc和空串,总共7个。另一方面,它的子序列包括这些子串以及ac,总共8个。


      由于子串是连续的,我们可以通过简单的数学公式计算出给定字符串的子串数量:n(n+1)/2+1。这里,n是字符串的长度。所以对于字符串abc,我们有3*(3+1)/2 + 1 = 7个子串。


      计算给定字符串的子序列数量:2^n。这是因为,对于字符串中的每个字符,我们可以选择包含它或不包含它在子序列中。因此,对于每个字符,我们有两种选择,所以总的选择数量是2^n。例如,对于字符串abc,我们有2^3 = 8个子序列。


打印一个字符串的全部子序列, 包括空字符串


输入:


abc


输出:


   // 第一个是空串

c

b

bc

a

ac

ab

abc


importjava.io.BufferedInputStream;
importjava.util.Scanner;
publicclasstest {
publicstaticvoidprintAllSub(char[] str, inti, Stringres) {
if (i==str.length) {
System.out.println(res);
return ;
        } else {
printAllSub(str, i+1, res); // 不要下标为i+1的字符printAllSub(str, i+1, res+str[i]); // 要第i+1个字符        }
    }
publicstaticvoidmain(String[] args) {
Scannercin=newScanner(newBufferedInputStream(System.in));
Stringstr=cin.next();
printAllSub(str.toCharArray(), 0, "");
cin.close();
    }
}


image.gif

================Talk is cheap, show me the code================

目录
相关文章
|
8月前
|
人工智能 算法 测试技术
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
【Leetcode -389.找不同 -392.判断子序列】
【Leetcode -389.找不同 -392.判断子序列】
57 0
|
5月前
|
存储 算法 Java
|
2月前
|
Python
递归魔法:判断字符串是否为回文
本文介绍了如何使用递归判断一个字符串是否是回文。回文字符串是指正读和反读都相同的字符串。文章详细讲解了递归的基本思想和Python实现,并通过多个示例验证了函数的正确性。递归方法通过将大问题分解成更小的子问题,使得判断回文变得简单高效。
70 5
|
8月前
392.判断子序列
392.判断子序列
27 0
|
8月前
|
人工智能 算法 Java
判断子序列
判断子序列
47 0
|
8月前
leetcode-392:判断子序列
leetcode-392:判断子序列
47 0
|
8月前
|
存储 编译器 C语言
Day2 排序子序列、倒置字符串
Day2 排序子序列、倒置字符串
57 0
|
算法 搜索推荐
【算法】非递归堆排序判断字符串中所有字符是否只出现一次
【算法】非递归堆排序判断字符串中所有字符是否只出现一次
53 0
字符串的逆序(循环和递归两种解法)
字符串的逆序(循环和递归两种解法)
214 0