C#で文字列内のすべての部分文字列を検索するプログラム
C#では、Substring()メソッドを使うことで、文字列内のすべての部分文字列(サブストリング)を簡単に取り出すことができます。
基本的な考え方
たとえば、次のような文字列を考えてみましょう。
Xyz
この文字列からすべての部分文字列を取得するには、部分文字列の長さを1から順に変えながら、開始位置を先頭から末尾までループ処理します。各位置に対してSubstring()メソッドを呼び出し、該当する部分文字列を抽出します。
for (int start = 0; start <= str.Length - i; start++) {
string substr = str.Substring(start, i);
Console.WriteLine(substr);
}サンプルコード
以下は、文字列内のすべての部分文字列を検索して表示するC#プログラムの完全な例です。
using System;
class Demo {
static void Main() {
string str = "xyz";
for (int i = 1; i < str.Length; i++) {
for (int start = 0; start <= str.Length - i; start++) {
string substr = str.Substring(start, i);
Console.WriteLine(substr);
}
}
}
}実行結果
このプログラムを実行すると、長さ1の部分文字列「x」「y」「z」、続いて長さ2の部分文字列「xy」「yz」が順に出力されます。
x y z xy yz
解説
外側のループは部分文字列の長さiを制御し、内側のループは開始位置startを制御しています。str.Length - iが開始位置の上限となることで、文字列の範囲外にアクセスすることなく、すべての組み合わせを漏れなく取得できます。なお、この例では元の文字列そのもの(長さ3の「xyz」)は含まれていません。完全な文字列も含めたい場合は、条件をi <= str.Lengthに変更してください。
-
K個の異なる文字を含むサイズNの部分文字列を検索するPythonプログラム
NサイズでK個の異なる文字を含む部分文字列が必要な場合、3つの引数を受け取る関数を定義し、「if」文による条件分岐を使って目的の文字列を返すのが一般的なアプローチです。本記事では、その具体的な実装方法をサンプルコードと実行結果、詳細な解説とともにわかりやすく紹介します。サンプルコード以下に、実際の実装例を示します。def generate_my_string(string_size, substring_size, distinct_chars): my_string = "" count_1 = 0 count_2 = 0 for i in r
-
文字列Tの中に含まれるSのすべてのアナグラムの開始インデックスを見つけるプログラム(C++・Python解説)
問題の概要 2つの文字列 S と T が与えられたとき、T の中に S のアナグラム(文字の並べ替え)が現れる開始インデックスをすべて求めるという問題です。文字列は小文字の英字のみで構成され、S と T の長さはそれぞれ 20 および 100 を超えないものとします。 たとえば、入力が S = cab、T = bcabxabc の場合、出力は [0, 1, 5] になります。これは、T の部分文字列として bca(インデックス 0)、cab(インデックス 1)、abc(インデックス 5)がそれぞれ S のアナグラムと一致するためです。 アルゴリズムの流れ この問題は「スライディングウィンドウ