计算字符串中的字符数并删除重复项

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 =&gt; ch).Select(kvp =&gt; $"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”

以上是关于计算字符串中的字符数并删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

Python编程题35--删除字符串中的所有相邻重复项

Leetcode 1047 删除字符串中的所有相邻重复项

LeetCode刷题(160)~删除字符串中的所有相邻重复项

删除字符串算法中的重复项

《LeetCode之每日一题》:73.删除字符串中的所有相邻重复项

⌈力扣⌋删除字符串中的所有相邻重复项