我在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
的相应字符后,嵌套迭代不会停止。我该如何解决这个问题?
答案 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"