gpt4 book ai didi

C# 检查一个字符串是否包含列表中的所有字符以计算重复项

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:30 24 4
gpt4 key购买 nike

如何检查字符串是否可以由字符列表(或数组)中的字符组成,同时考虑重复字母。

所以,假设我有字符串(或字符数组/列表/其他)“abcc”和字符列表(或数组/字符串/其他,它都可以转换为任何)“['c'],[ 'b'],['a']”。如何将这两个值相互检查,同时考虑到“c”在 char 数组中只存在一次,因此它应该失败。

我知道我可以使用“.Contains”轻松完成此操作并遍历整个字符数组,同时从数组中删除该特定字符,或者使用“IndexOf”并执行相同的操作,但我会想知道是否有任何方法可以不从 char 数组中删除任何项目。

最佳答案

var input = "abbc";
var validChars = new List<char>() { 'c', 'b', 'a' };
var invalidChars = validChars.Where(validChar => input.Count(inputChar => inputChar == validChar) > 1);

然后你可以检查是否invalidChars有任何条目。

编辑:我将保留我原来的回复,但根据您的反馈,我认为这是应遵循的正确程序。

首先,我认为最好将您的字符数组转换为某种字典,使用 char作为键和 int作为值(value)(告诉你有多少字母可用)。

var charPool = new Dictionary<char, int>()
{
{ 'a', 2 },
{ 'b', 5 },
{ 'c', 5 },
{ 'd', 5 },
{ 'f', 0 },
...
{ 'z', 5 }
};

从那里,您可以获取输入字符串并应用一些 LINQ 来根据条件过滤值。我选择了!charPool.ContainsKey(inputChar)或者 charPool[inputChar] < inputWord.Count(c => c == inputChar)作为我的匹配标准。这些基本上声明“对于应用此过滤器的每个字符,如果 1. 字典中不存在该键,或者 2. 字典中该字符的值或数量小于该字符在输入字符串,则该字符无效。

给定一个输入字符串

var inputWord = "bananafone";

以下代码应返回字母 a 的 IEnumerable , f , 和 e . a ,因为我们需要 3 个而只有 2 个; f ,因为我们的条目是 0,我们需要 1;和 e , 因为不存在该字母的条目。另外,一个 .Distinct()使用它是因为没有它,对于这个例子,a将在遍历输入字符串时输入 3 次,并应用过滤器。

var charsNeeded = inputWord.Where(inputChar => !charPool.ContainsKey(inputChar) || charPool[inputChar] < inputWord.Count(c => c == inputChar)).Distinct();

请注意,这种方法的一个缺点是我们没有计算我们拥有的字符数和我们需要的字符数之间的差异。但是我认为实现起来并不困难;例如,您可以轻松地为输入字符串创建另一个字典,然后比较两者。

关于C# 检查一个字符串是否包含列表中的所有字符以计算重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com