किसी स्ट्रिंग के सभी संभावित सबस्ट्रिंग्स खोजने के लिए हम नेस्टेड लूप्स का उपयोग करते हैं: बाहरी लूप सबस्ट्रिंग की लंबाई नियंत्रित करता है, आंतरिक लूप शुरुआती स्थिति।
उदाहरण
using System;
class Demo {
static void Main() {
string str = "xyz";
// लंबाई 1 से str.Length-1 तक
for (int len = 1; len < str.Length; len++) {
// सभी संभावित शुरुआती स्थितियां
for (int start = 0; start <= str.Length - len; start++) {
string substr = str.Substring(start, len);
Console.WriteLine(substr);
}
}
}
}
आउटपुट
x y z xy yz
व्याख्या (xyz के लिए)
| लंबाई | शुरुआत | सबस्ट्रिंग |
|---|---|---|
| 1 | 0 | x |
| 1 | 1 | y |
| 1 | 2 | z |
| 2 | 0 | xy |
| 2 | 1 | yz |
नोट: पूरी लंबाई के सबस्ट्रिंग्स
उपरोक्त कोड लंबाई str.Length के सबस्ट्रिंग्स को शामिल नहीं करता (यानी पूरी स्ट्रिंग)। यदि आप पूरी स्ट्रिंग भी चाहते हैं:
for (int len = 1; len <= str.Length; len++) // < के बजाय <=
for (int start = 0; start <= str.Length - len; start++)
Console.WriteLine(str.Substring(start, len));
सबस्ट्रिंग्स की कुल संख्या
लंबाई n की स्ट्रिंग के लिए: n(n+1)/2 सबस्ट्रिंग्स होते हैं।
- "xyz" (n=3): 3×4/2 = 6 सबस्ट्रिंग्स (x, y, z, xy, yz, xyz)
- "abcd" (n=4): 4×5/2 = 10 सबस्ट्रिंग्स
LINQ के साथ (फंक्शनल शैली)
using System.Linq;
var substrings = Enumerable.Range(1, str.Length)
.SelectMany(len => Enumerable.Range(0, str.Length - len + 1)
.Select(start => str.Substring(start, len)));
उपयोग केस
- पैटर्न मिलान/खोज एल्गोरिदम
- DNA अनुक्रम विश्लेषण
- स्ट्रिंग प्रोसेसिंग प्रतियोगिताएं
- सभी संभावित उप-अनुक्रम उत्पन्न करना