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

结论

我们使用两个示例执行了查找字符串所有子集的程序。在第一个示例中,我们使用了位操作方法,在第二个示例中,我们使用了递归方法来执行程序。两个程序都给出了类似的子集输出。因此,程序执行成功。

更新于: 2023年2月13日

658 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.