공통 접두사를 찾는 방법에 대한 코드를 제시합니다. 좀 더 간단한 방법이 있을 듯 한데요?
1개의 좋아요
뭐 이런 느낌으로도 되겠군요.
string[] input = { "flower", "flight", "fly", "flow" };
string result = LongestCommonPrefixFun(input);
Console.WriteLine("Longest Common Prefix is- " + result); // Output: "fl"
static string LongestCommonPrefixFun(string[] input)
{
if (input.Length is 0)
return string.Empty;
var minLength = input.Min(x => x.Length);
for (var i = 0; i < minLength; i++)
{
if (input.Select(x => x[i]).Any(x => x != input[0][i]) is true)
return input[0][..i];
}
return input[0][..minLength];
}
1개의 좋아요
오, ChatGPT도 나름 짜주네요.
| ChatGPT (Mar 23 Version)
static string LongestCommonPrefix(string[] input)
{
if (input == null || input.Length == 0)
return string.Empty;
var minLength = input.Min(x => x.Length);
if (minLength == 0)
return string.Empty;
for (var i = 0; i < minLength; i++)
{
var currentChar = input[0][i];
for (var j = 1; j < input.Length; j++)
{
if (input[j][i] != currentChar)
return input[0].Substring(0, i);
}
}
return input[0].Substring(0, minLength);
}
2개의 좋아요
저도 해봤습니다
string[] input = { "flower", "flight", "fly", "flow" };
Console.WriteLine("Longest Common Prefix is- " + input.LongestCommonPrefix()); // Output: "fl"
public static class StringExtensions
{
public static string LongestCommonPrefix(this IEnumerable<string>? source)
{
if (source == null || !source.Any()) return string.Empty;
var firstString = source.First();
var index = 0;
foreach (var c in firstString)
{
if (source.All(s => s.Length > index && s[index] == c) == false) break;
index++;
}
return firstString[..index];
}
}
1개의 좋아요
저도 도전.
string FindLongestCommonPrefix(IEnumerable<string> input) => input.Aggregate
(
(a: string.Empty, index: 0),
(t, next) => t.index switch
{
0 => (next, 1),
_ => (t.a[..t.acc.AsSpan().CommonPrefixLength(next)], 1)
},
(t) => t.a
);
2개의 좋아요