ホームページ >バックエンド開発 >Golang >Go を使用して文字列内の重複する一致を効率的に見つけるにはどうすればよいですか?

Go を使用して文字列内の重複する一致を効率的に見つけるにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 03:55:11184ブラウズ

How Can I Efficiently Find Overlapping Matches in a String Using Go?

Golang での重複パターン マッチング: シンプルなソリューション

Go の正規表現パッケージはパターン マッチングのための堅牢な機能を提供しますが、ネイティブでは重複のサポートがありません。一致します。これに対処するには、strings.Index 関数を利用したシンプルで効率的なアプローチが、より適切な解決策を提供します。

次のコードを考えてみましょう。

input := "...#...#....#.....#..#..#..#......."
idx := []int{}
j := 0
for {
    i := strings.Index(input[j:], "..#..")
    if i == -1 {
        break
    }
    fmt.Println(j)
    idx = append(idx, j+i)
    j += i+1
}
fmt.Println("Indexes:", idx)

このスニペットでは、変数 input にターゲット文字列。 idx という名前の整数の空のスライスを初期化して、入力文字列内のパターン一致の開始インデックスを格納します。 j 変数は、検索内の現在位置を追跡します。

ソリューションの中核は for ループにあります。 strings.Index を繰り返し呼び出して、パターン「.#..」を検索します。戻り値 i は、インデックス j から始まるパターンの最初の出現を表します。 i が -1 でない場合、一致が見つかったので、その開始インデックス (j i) を idx スライスに記録します。次に、j を i 1 ずつインクリメントして、一致した文字に続く文字に検索を移動します。

ループは、一致するものがなくなるまでこのプロセスを継続します。次に、入力文字列内の「.#..」のすべての重複一致に対する開始インデックスのリストを取得します。

以上がGo を使用して文字列内の重複する一致を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。