2015-03-25 25 views
-1

我解決這個string scramble problem上coderbyte.com:字符串加擾Coderbyte

[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中的相應字符後,嵌套迭代不會停止。我怎樣才能解決這個問題?

回答

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" 
+0

感謝您的解決方案。我正在尋找一種方法來有效地重新安排'str1'以匹配'str2',並且如果'str1'和'str2'相等,它將返回true,否則返回false。 – Guy 2015-03-26 02:38:09

+0

這與問題提出的問題不同。 – sawa 2015-03-26 03:25:31