返回最短单词的长度

时间:2019-11-28 08:59:38

标签: c# string linq

我需要有关Simple的帮助,给定一串单词,返回最短单词的长度。

字符串永远不会为空,并且您无需考虑其他数据类型。

[Test]
public void BasicTests()
{
  Assert.AreEqual(3, Kata.FindShort("bitcoin take over the world maybe who knows perhaps"));
  Assert.AreEqual(3, Kata.FindShort("turns out random test cases are easier than writing out basic ones"));      
}

我的解决方案不起作用。我不知道此样本。

public static int FindShort(string s)
{
     String[] arr = s.Split(' ');
     int min = arr.Select(x => x.Length).Min();
     return min;
}

2 个答案:

答案 0 :(得分:0)

好吧,如果您要查找一般情况(带有标点符号数字等的字符串),那么我们应该说出什么单词是。

如果我们将单词定义为

  

字母和撇号

的顺序

我们可以尝试使用正则表达式Match个单词:

using System.Linq;
using System.Text.RegularExpressions;

...

public static int FindShort(string value) {
  if (null == value)
    return 0; // or throw new ArgumentNullException(nameof(value));

  return Regex
    .Matches(value, @"[\p{L}']+") // word is one or more letter or apostroph
    .Cast<Match>()
    .Min(match => match.Value.Length);
}

演示:

// The shortest word is "four" and the answer is 4
// Your current code returns 1 for "-"  
string test = 
  "1. Testing string (2. тестовая строка - Russian); expected answer - 4 - four";

Console.Write(FindShort(test));

答案 1 :(得分:0)

在这里:

在C#中:

   public static int FindShort(string sentence)
   {
        if(!string.IsNullOrEmpty(sentence))
        {
               return Regex.Split(sentence, @"\s+").OrderBy(x1 => x1.Length).ToList().First().Length;
        }
        return -1;
    }

在Vb.Net中:

Public Shared Function FindShort(ByVal sentence As String) As Integer
    If Not String.IsNullOrEmpty(sentence) Then
        Return Regex.Split(sentence, "\s+").OrderBy(Function(x1) x1.Length).ToList().First().Length
    End If

    Return -1
End Function