如何查找外观大于2的字符串中的所有字符

时间:2010-04-19 14:25:45

标签: algorithm search

我对算法有疑问:

如何查找外观大于特定数字的字符串中的所有字符,例如2,有效吗?

问候。

6 个答案:

答案 0 :(得分:6)

Counting sort对于单字节编码非常有效,边界情况是双字节编码。对于更广泛的编码,它不是那么有效,但计数数组可以用哈希表替换。

编辑:顺便说一下,这是太普遍的解决方案,只做计数阶段和动态输出结果将是绰绰有余。

答案 1 :(得分:2)

s= #your string
h=Hash.new(0)

s.each_char {|c| h[c]+=1 }
h.select {|char,count| count>2}

答案 2 :(得分:1)

var word = "......";
var chars = word.GroupBy(w => w).Where(g => g.Count > 2).Select(g => new { character = g.Key, count = g.Count });

答案 3 :(得分:1)

忍不住试试这个。

  1. 为每个(ASCII)字符保留256个元素的内部数组。
  2. 在输入字符串上循环一次。
  3. 使用字符的序数值增加给定字符的计数,作为对内部数组的直接访问。
  4. 德尔福实施

    Type
      TCharCounter = class(TObject)
      private
        FCounts: array[0..255] of byte;
      public
        constructor Create(const Value: string);
        function Count(const AChar: Char): Integer;
      end;
    
    { TCharCounter }
    
    constructor TCharCounter.Create(const Value: string);
    var
      I: Integer;
    begin
      inherited Create;
      for I := 1 to Length(Value) do
        Inc(FCounts[Ord(Value[I])]);
    end;
    
    function TCharCounter.Count(const AChar: Char): Integer;
    begin
      Result := FCounts[Ord(AChar)];
    end;
    

答案 4 :(得分:0)

我会对字符串进行排序,然后只需遍历它并为每个字母保持运行记录。最后一个只是O(n)所以它会像你的排序一样高效。

答案 5 :(得分:0)

更简单的方法是使用数组:occurrence [256],用0的

初始化它们

并且对于string中的每个char,出现[(int)char] ++。

然后您只需扫描事件即可找到满足您标准的字符。