u012555917
paolongtao8
2009-08-04 07:35
浏览 210
已采纳

按子字符串出现的次数,排序字符串中子字符串

解释:
“字符串1,字符串2,字符串1,字符串3,字符串4,......,字符串n,字符1,字符串13,.......,字符串x”
所有的字符串均不包含‘,’。

想根据这些字符串出现的次数,从多到少排列这些字符串,多谢指点,谢谢!
[b]问题补充:[/b]

a=["a", "b", "c", "a", "b", "d", "c", "a", "c", "b", "d", "e", "c", "b"]
=> ["a", "b", "c", "a", "b", "d", "c", "a", "c", "b", "d", "e", "c", "b"]
h={}
=> {}
n=0
=> 0
while n < a.size do
?> h[n] = a[n]
n=n+1
end
=> nil
h
=> {5=>"d", 11=>"e", 0=>"a", 6=>"c", 12=>"c", 1=>"b", 7=>"a", 13=>"b", 2=>"c", 8=>"c", 3=>"a", 9=>"b", 4=>"b", 10=>"d"}
h.size
=> 14
a.size
=> 14
a=a.join(',')
=> "a,b,c,a,b,d,c,a,c,b,d,e,c,b"
a.count('a')
=> 3
a.count('b')
=> 4
a.count('c')
=> 4
a.count('d')
=> 2
a.count('e')
=> 1
b=h.sort{|a,b| a[1]<=>b[1]}
=> [[3, "a"], [7, "a"], [0, "a"], [1, "b"], [13, "b"], [4, "b"], [9, "b"], [6, "c"], [2, "c"], [8, "c"], [12, "c"], [5, "d"], [10, "d"], [11, "e"]]
print b
3a7a0a1b13b4b9b6c2c8c12c5d10d11e=> nil

[b]问题补充:[/b]
=> ["a", "b", "c", "a", "b", "d", "c", "a", "c", "b", "d", "e", "c", "b"]

h = {}
=> {}
a.each do |str|
?> h[str] = (h[str] || 0) + 1
end
=> ["a", "b", "c", "a", "b", "d", "c", "a", "c", "b", "d", "e", "c", "b"]
b = h.sort{|a, b| b[1]<=>a[1]}.collect{|tmp| tmp[0]}.join()
=> "cbade"

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • winteen
    winteen 2009-08-04 19:34
    已采纳

    while n < a.size do
    ?> h[n] = a[n]

    n=n+1
    end
    ...
    a = ["a", "b", "c", "a", "b", "d", "c", "a", "c", "b", "d", "e", "c", "b"]
    h = {}
    a.each do |str|
    h[str] = (h[str] || 0) + 1
    end
    b = h.sort{|a, b|a[1]<=>b[1]}.collect{|tmp|tmp[0]}.join()
    p b

    点赞 评论
  • winteen
    winteen 2009-08-04 09:02

    假设字符串总数为N
    则以O(N)的代价遍历建立Hash h
    然后a = h.sort{|a, b| a[1]<=>b[1]}
    然后print a就可以了

    点赞 评论

相关推荐