计算字符串中的字符数并删除重复项
Posted
技术标签:
【中文标题】计算字符串中的字符数并删除重复项【英文标题】:Count the number of characters in a string and delete the duplicates 【发布时间】:2021-03-21 00:59:21 【问题描述】:我正在尝试查找字符串中每个字符的数字。我正在使用下面的代码。 我正在遍历每个字符。现在我如何修改代码,这样我就不会再循环遍历同一个字符了。例如:“a”出现了 3 次。我只想让我的代码考虑一次。
string input = "aajykumkar";
int count = 0;
for (int i = 0; i < input.Length; i++)
count = input.Count(x => x == input[i]);
Console.WriteLine("Number of occurances of " + input[i] + " " + count);
Console.ReadLine();
【问题讨论】:
所以基本上你想知道一个字符是否存在于字符串中? 在最简单的情况下,使用一个列表来记录您已经看过的所有字符,如果当前字符出现在该列表中,则不要再次运行计数。 @LaurentS。我想知道每个字符在字符串中出现了多少次。 @ADyson 不知道该怎么做。你能给我一些关于代码的提示吗? @Ajay 已经发布了一个更简洁的答案,但我对“不确定”感到困惑。你被困在哪里了?你是说你不知道 a) 如何创建一个列表,b) 如何将东西放入其中,和/或 c) 如何检查一个值是否存在于列表中,或者 d) 其他东西?当然 a b 和 c 不应该是棘手的,并且可以很容易地研究。 【参考方案1】:您可以使用System.Linq
命名空间非常轻松地做到这一点:
string input = "aajykumkar";
var groupedLetters = input.GroupBy(letter => letter);
foreach(var letter in groupedLetters)
Console.WriteLine("Number of occurances of " + letter.Key + " " + letter .Count());
输出:
Number of occurances of a 3
Number of occurances of j 1
Number of occurances of y 1
Number of occurances of k 2
Number of occurances of u 1
Number of occurances of m 1
Number of occurances of r 1
不要忘记在你的代码中添加using System.Linq;
。
您可以在以下位置查看working DEMO Fiddle:
https://dotnetfiddle.net/9l8l2j
【讨论】:
是否可以返回字符串,我正在寻找输出“a3j1y1k2u1m1r1”【参考方案2】:您所做的效率非常低,因为您搜索字符串的次数与字符串的长度一样多,即您的算法的复杂度为O(n^2)
。
你想要的是解析字符串一次并记录你遇到每个元素的次数,然后显示:
const string s = "oijewoijioajsdioajdiowrw";
foreach (var kvp in s.GroupBy(ch => ch).ToDictionary(w => w.Key, w => w.Count()))
Console.WriteLine($"Number of occurances in kvp.Key is kvp.Value");
【讨论】:
是否可以返回字符串,我正在寻找输出“a3j1y1k2u1m1r1” 你的意思是string.Concat(s.GroupBy(ch => ch).Select(kvp => $"kvp.Keykvp.Count()"))
?【参考方案3】:
你可以这样做。
See here for more information of looping through an array:
^ 此外,它从 Ehsan Sajjad 的回答中更深入地介绍了 linq 方法的工作原理。
static void Main(string[] args)
string input = "aajykumkar";;
int n = input.Length;
Console.WriteLine("Unique array elements: ");
for (int i = 0; i < n; i++)
bool isDuplicate = false;
for(int j=0;j<i;j++)
if(items[i] == items[j])
isDuplicate = true;
break;
if(!isDuplicate)
Console.WriteLine(items[i]);
Console.ReadLine();
这给出了唯一字符的结果。然后你也可以对它进行计数,或者在循环之外创建一个新的 var,如果你在字符串中遇到一个新的(唯一的)字符,你每次都添加 +=1
【讨论】:
是否可以返回字符串,我正在寻找输出“a3j1y1k2u1m1r1”以上是关于计算字符串中的字符数并删除重复项的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode刷题(160)~删除字符串中的所有相邻重复项