我需要有关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;
}
答案 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