我对算法有疑问:
如何查找外观大于特定数字的字符串中的所有字符,例如2,有效吗?
问候。
答案 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)
忍不住试试这个。
德尔福实施
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] ++。
然后您只需扫描事件即可找到满足您标准的字符。