Golang 查找字符串的所有子集

Golang 查找字符串的所有子集

Golang中的字符串是一组字符。由于Go中的字符串是不可变的,在产生后就无法修改。但是,可以通过将字符串连接或添加到现有字符串中来创建新的字符串。作为Go中的内置类型,字符串类型可以像任何其他数据类型一样以各种方式使用。

步骤

  • 第1步 - 在程序中创建一个包main,并声明fmt(格式化包)和sort(排序包)。其中,main生成可执行代码,fmt用于格式化输入和输出。

  • 第2步 - 创建一个main函数,在该函数中创建一个字符串,并使用Golang的打印语句将其打印到控制台上。

  • 第3步 - 从控制台调用subset_string函数,并将字符串作为输入传递给它。

  • 第4步 - 在函数中,首先将一个名为size的变量初始化为输入字符串的长度。

  • 第5步 - 然后,通过外部循环迭代0到2(size)-1之间的所有整数,其中每个整数的每一位都对应于输入字符串中的一个字符。

  • 第6步 - 在内部循环中,检查当前整数I的第j位。如果第j位设置为1,则输入字符串的第j个字符是当前子集的一部分。

  • 第7步 - 然后将字符添加到子集中,并随后打印子集。

  • 第8步 - 直到确定并打印出输入字符串的每个子集,外部循环都会继续执行。

  • 第9步 - 使用fmt.Println()函数执行打印语句,其中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

结论

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程