11

私がやりたいのは、文字列を取得し、長さ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を使用して)これを行うためのより良い方法があるかどうか疑問に思っていますか?

4

3 に答える 3

15

シンプルで読みやすいアプローチの場合、これはどうですか?

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 
于 2012-05-23T04:22:48.643 に答える
4

この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);
}
于 2012-05-23T03:20:02.897 に答える
0

コードは次のとおりです。

   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;
    }
于 2017-04-30T20:13:38.400 に答える