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