Как найти все возможные подстроки в строке?
что я хотел бы сделать, это взять строку и вернуть все возможные подстроки, которые больше длины 2. Итак, используя welcome
пример:
we
el
lc
co
me
wel
elc
lco
com
ome
welc
elco
lcom
come
and so on.....
единственный способ, который я мог придумать, чтобы сделать это было что-то вроде этого (полностью непроверено):
for (int i = 0; i < word.Length; i++) //i is starting position
{
for (int j = 2; j + i < word.Length; j++) //j is number of characters to get
{
wordList.Add(word.SubString(i, j));
}
}
но мне интересно, есть ли лучший способ сделать это (возможно, используя LINQ), о котором я не знаю?
3 ответов
Как это для простого, читаемого подхода?
var text = "welcome";
var query =
from i in Enumerable.Range(0, text.Length)
from j in Enumerable.Range(0, text.Length - i + 1)
where j >= 2
select text.Substring(i, j);
производит:
we
wel
welc
welco
welcom
welcome
el
elc
elco
elcom
elcome
lc
lco
lcom
lcome
co
com
come
om
ome
me
это решение LINQ должно работать:
var str = "welcome";
var items = Enumerable
.Range(0, str.Length)
.SelectMany(i => Enumerable.Range(2, str.Length-i-1).Select(j => str.Substring(i, j)))
.Distinct()
.OrderBy(s => s.Length);
foreach (var s in items) {
Console.WriteLine(s);
}
код выглядит следующим образом:
internal static List<string> GetAllSubstring(String mainString)
{
try
{
var stringList = new List<string>();
if(!string.IsNullOrEmpty(mainString))
{
for (int i = 0; i < mainString.Length; i++) //i is starting position
{
for (int j = 2; j + i < mainString.Length; j++) //j is number of characters to get
{
if(!stringList.Contains(mainString.Substring(i, j)))
{
stringList.Add(mainString.Substring(i, j));
}
}
}
}
return stringList;
}
catch(Exception ex)
{
}
return null;
}