在计算机科学中,子序列和子串的概念非常重要,这两个概念经常在数据处理,文本分析,编程算法等领域被广泛使用。
首先,让我们定义子序列和子串的概念。子串是原始字符串的一个连续的部分,而子序列则可以不连续。例如,对于字符串abc
,它的子串包括a
、b
、c
、ab
、bc
、abc
和空串,总共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(); } }
================Talk is cheap, show me the code================