Go语言程序查找字符串的所有子集
Go语言中的字符串是字符的集合。由于Go语言中的字符串是不可变的,因此一旦生成,就不能修改。但是,连接或添加到现有字符串可以创建新的字符串。作为Go语言中的内置类型,字符串类型可以像任何其他数据类型一样以多种方式使用。
算法
步骤 1 − 创建一个名为 main 的包,并在程序中声明 fmt(格式化包)和 sort 包,其中 main 生成可执行代码,fmt 帮助格式化输入和输出。
步骤 2 − 创建一个 main 函数,并在该函数中创建一个字符串,并使用 Go 语言中的 print 语句将其打印到控制台。
步骤 3 − 从控制台调用函数 subset_string,并将字符串作为输入包含在其中。
步骤 4 − 在函数中,首先将名为 size 的变量初始化为输入字符串的长度。
步骤 5 − 然后,使用外部循环迭代 0 到 2(size)-1 之间的所有整数,其中每个整数的位对应于输入字符串中的一个字符。
步骤 6 − 它在内部循环中检查当前整数 I 的第 j 位。如果第 j 位设置为 1,则输入字符串的第 j 个字符是当前子集的一部分。
步骤 7 − 然后将字符添加到子集中,并随后打印子集。
步骤 8 − 直到识别并打印出输入字符串的每个子集,外部循环才会继续。
步骤 9 − 使用 fmt.Println() 函数执行 print 语句,其中 ln 表示换行。
步骤 10 − 该算法利用位操作的概念,通过迭代 0 到 2^size-1 之间的所有整数并检查每个位来确定将哪些字符包含在当前子集中,从而生成输入字符串的所有可能的子集。
示例 1
在本例中,我们将了解如何使用位操作方法获取字符串的所有子集。
package main
import "fmt"
func subset_string(string_val string) {
size := len(string_val) //denotes length of input string
for i := 0; i < (1 << uint(size)); i++ {
subset := ""
for j := 0; j < size; j++ {
if i&(1<<uint(j)) != 0 {
subset += string(string_val[j])
}
}
fmt.Print(subset + " ") //subset is subsequently printed
}
}
func main() {
string_val := "rit" //Create a string
fmt.Println("The initial string created here is:", string_val)
fmt.Println("The subsets of the string created is:")
subset_string(string_val)
}
输出
The initial string created here is: rit The subsets of the string created is: r i ri t rt it rit
示例 2
此示例使用名为 subsets 的递归函数。
package main
import "fmt"
func subsets(mystr string, start int, subset string) {
fmt.Println(subset)
for i := start; i < len(mystr); i++ { //run a loop till the length of mystr
subsets(mystr, i+1, subset+string(mystr[i]))
}
}
func main() {
mystr := "rit" //Create string
fmt.Println("The original string created here is:", mystr)
subsets(mystr, 0, "") //call the function subsets with three arguments
}
输出
The original string created here is: rit r ri rit rt i it t
结论
我们使用两个示例执行了查找字符串所有子集的程序。在第一个示例中,我们使用了位操作方法,在第二个示例中,我们使用了递归方法来执行程序。两个程序都给出了类似的子集输出。因此,程序执行成功。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP