我已經嘗試了 Stackoverflow 的一些答案,但它們不計算符號的暫存器。例如
sTreSS => T(不是's'),壓力 => t
這是我嘗試過的
public static char FirstNonRepeatedCharacter(string s)
{
var output = s.GroupBy(item => item).First(x => x.Count() == 1).Key;
return output;
}
我需要編輯不區分大小寫的代碼并回傳正確的暫存器
幾個-> s;- SomeBody - S
uj5u.com熱心網友回復:
這正是您所需要的,但在 LINQ 中并不完全。在我看來,您不必嚴格依賴 LINQ ......
Console.WriteLine(FirstNonRepeatedCharacter("sTreSS"));
Console.WriteLine(FirstNonRepeatedCharacter("stress"));
Console.WriteLine(FirstNonRepeatedCharacter("sEVeraL"));
Console.WriteLine(FirstNonRepeatedCharacter("SomeBody"));
Console.WriteLine(FirstNonRepeatedCharacter("AaBbCc"));
Console.ReadKey();
static char? FirstNonRepeatedCharacter(string s)
{
// Gather the count for each character (case insensitive, example: 's' and 'S' is in the same group).
var counts = new Dictionary<char, int>();
foreach (var ch in s.ToLower())
{
counts[ch] = counts.TryGetValue(ch, out var count)
? count 1
: 1;
}
// Return first character with count 1.
return s.FirstOrDefault(ch => counts[char.ToLower(ch)] == 1);
}
輸出是:
噸
噸
s
小號
無(空)
uj5u.com熱心網友回復:
您可以按原樣按字符分組,但按已處理的字符分組:
.GroupBy(c => char.ToLower(c), c => c)
代碼:
// either first not repeating character or '\0'
private static char FirstNonRepeatedCharacter(string s) => s
?.GroupBy(c => char.ToLower(c), c => c)
?.FirstOrDefault(g => g.Count() == 1)
?.First()
?? '\0';
編輯:如果你想回傳string- “......我需要回傳一個空字串......” - 你可以string在提供所需比較器的同時進行分組:
private static string FirstNonRepeatedCharacter(string s) => s
?.GroupBy(c => c.ToString(), StringComparer.OrdinalIgnoreCase)
?.FirstOrDefault(g => g.Count() == 1)
?.Key
?? "";
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515639.html
標籤:C#林克
