字符串争夺Coderbyte

时间:2015-03-25 05:48:04

标签: ruby string

我在coderbyte.com上解决了这个string scramble problem

  

[H] ave函数StringScramble(str1,str2)传递两个参数并返回字符串"true"如果str1个字符的一部分可以重新排列以匹配str2,否则返回字符串"false"。例如:如果str1"rkqodlw"str2"world",则输出应返回"true"。不会使用参数输入标点符号和符号。

这是我的完整代码:

def StringScramble(str1,str2)
    #convert string to array
    #create an empty string
    #double iterate and add string if item is satisfies condition
    #compare

    str1= str1.split("")
    str2= str2.split("")
    str = ""

    for i in 0...str2.length
        for j in 0...str1.length
            if str2[i]==str1[j]
                str = str + str1[j]
                str1.delete_at(j)
                puts "#{str1}"
            end
        end
    end

    puts str
    if str == str2.join("")
        true
    else
        false
    end
end

适用于str1中没有大量重复字母的简单案例,但适用于其他一些案例,例如

str1 =   "heloooolwrdlla"   #"coodrebtqqkye"
str2= "helloworld"  #"coderbyte"
StringScramble(str1,str2)

我得到hellllooword的结果。问题源于条件str2[i]==str1[j],我尝试通过删除已经使用过的元素来修复它,但它继续添加重复的元素。找到要添加到str的相应字符后,嵌套迭代不会停止。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

def StringScramble str1, str2
  str1.chars.sort.join =~ Regexp.new(str2.chars.sort.join(".*")) ?
  "true" : "false"
end

StringScramble("rkqodlw", "world") # => "true"
StringScramble("heloooolwrdlla", "helloworld") # => "true"