`
googya
  • 浏览: 140549 次
  • 性别: Icon_minigender_1
  • 来自: 汉川
社区版块
存档分类
最新评论

寻找最长递增数字子串

阅读更多
    有一个字符串,其中包含了多个数字子串,要求求出最长的递增数字子串,比如,s='asdf1123as456df112365asdfa'中最长递增数字子串是11236.

string="asdfasdfasdf1111112222222356789462124asdfasdfasdfa9874563214756asdfasdfasdfasdfasdfasdfalkjlaskdjflkasdf124578"
s=string.scan(/\d+/)
#t=s[1].split //
#puts t.size
#print t,"\n"
ss=[]
hash={}
max=tt=0
s.each do |t|
    t=t.split //
for i in 0...(t.size)
    if(t[i+1]&&t[i+1]>=t[i])
         ss<<t[i]
        tt+=1
        if(tt>max)
            max=tt
            hash[ss.join('')]=max
        end
    else
        ss<<t[i]
        hash[ss.join('')]=ss.size
        ss=[]
        tt=0
    end
end
end
puts  hash.sort_by {|k,v|k.size}.last[0]
#puts hash




应该会有更简洁的方法的,慢慢再想!!!!
3
1
分享到:
评论
14 楼 orcl_zhang 2010-10-18  
Hooopo 写道
   

虎跑看傻了.
13 楼 Hooopo 2010-10-18  
   
12 楼 orcl_zhang 2010-10-18  
googya 写道
night_stalker 写道
"aaa31e4r23r".scan(/0*1*2*3*4*5*6*7*8*9*/).max_by(&:size)



高招!!!!

ns太猛了.. 
11 楼 googya 2010-10-18  
正则表达式果然很强大!
10 楼 googya 2010-10-18  
night_stalker 写道
"aaa31e4r23r".scan(/0*1*2*3*4*5*6*7*8*9*/).max_by(&:size)



高招!!!!
9 楼 night_stalker 2010-10-18  
"aaa31e4r23r".scan(/0*1*2*3*4*5*6*7*8*9*/).max_by(&:size)
8 楼 orcl_zhang 2010-10-18  
首先用正则找到数字字符串
"aaa31e4r23r".split(/\D+/)

在用collect调用下面的方法,找到每个数字字符串中最长递增数字子串.
找出数字字符串中最长递增数字子串.
t = "238923".chars.to_a
result = []
temp = ""

while !t.empty? do
  temp << t[0] if temp.empty?
  if t[1]
     t[0] <= t[1] ? temp << t[1] : (result << temp;temp = "")
  else
    result << temp
  end
  t.shift
end

puts result.join(',')

然后在冒泡,找到size最长的.
7 楼 googya 2010-10-17  
orcl_zhang 写道
引用
寻找最长递增数字子串

提交完后,悲剧的发现看错题目了....

要不要我帮你删除掉?
6 楼 orcl_zhang 2010-10-17  
引用
寻找最长递增数字子串

提交完后,悲剧的发现看错题目了....
5 楼 googya 2010-10-17  
orcl_zhang 写道
没有必要排序的,求出最大即可.

不好意思这位哥们,是求最长递增数字子串,我刚开始没有说清楚(虽然我代码已经写清楚了)
4 楼 orcl_zhang 2010-10-17  
没有必要排序的,求出最大即可.
3 楼 orcl_zhang 2010-10-17  
lz你代码真的很无语...
s.each do |t| 
    t=t.split
//这里t.size == 1吧,你要干吗.....
for i in 0...(t.size) 
  if(t[i+1]&&t[i+1]>=t[i]) //这一陀是干吗的..
ss<<t[i] 
        hash[ss.join('')]=ss.size 
        ss=[] 
        tt=0

盗用hooopo的代码,修改下.
"aaa31e4r23r".split(/\D+/).collect(&:size).max
2 楼 googya 2010-10-17  
Hooopo 写道
"aaa31e4r23r".split(/\D+/).sort_by{|x| x.size}.last                  



虎跑,不好意思啊,是求最长递增数字子串。当时写掉了这个要求!!! 
1 楼 Hooopo 2010-10-17  
"aaa31e4r23r".split(/\D+/).sort_by{|x| x.size}.last                  

相关推荐

Global site tag (gtag.js) - Google Analytics