2011-05-06 8 views
2

주어진 문자열에서 가능한 모든 문자열 조합 조합을 찾는 방법은 무엇입니까?문자열의 부분 문자열 조합

strings.select do |s| 
    given_string.index(s) 
end 

이 당신에게 줄 것이다 :

[ 
["ab","aa","ba","bb","ab], 
["ab","aab","ab","ba","bab"] 
["aba","aba","bb","ab"] 
] 
+0

"abc", "acb", bac ","bca ", cba"를 반환하는 모든 문자 조합을 의미합니까, 모든 문자열의 모든 연결을 의미합니까 (예 : [ "dog" , "cat"]는 "dogcat", "catdog"] 또는 모든 문자의 모든 조합과 모든 연결을 반환합니다. – jefflunt

+3

'strings '에 "bab"이 포함되어 있지 않으면 반환 할 때 "bab"이 될 수있는 방법은 무엇입니까? –

+0

재귀 함수를 호출하는 것처럼 보입니다. (이미 그렇게했으면 사과드립니다.) 건배! –

답변

1

거친 생각이 같은 수 있습니다 :

strings = ["ab","aa","ab","bb","ba","aba","aab"] 
given_string = "abaababbab" 

반환하는

["ab", "aa", "ab", "bb", "ba", "aba", "aab"] 

나는 아니에요 여기에서 복제본을 찾고 있는지 확인하십시오. 이런 종류의 일이 DNA 시퀀싱을 매우 계산 집약적으로 만드는 이유 때문에주의를 기울이지 않으면 계산적으로 복잡한 문제가 발생할 수 있습니다.

-1

다음 :

strings = ["ab","aa","ab","bb","ba","aba","aab"] 
@strings = strings.uniq! 
@given_string = 'abaababbab' 
@given_length = @given_string.length 

def parse 
    @parses.each do |parse| 
    before = parse.pop # offset of the part that hasn't yet been parsed 
    @strings.each do |str| 
     next unless m = @given_string.match(str, before) 
     first, last = m.offset(0) 
     next unless first == before 
     if last == @given_length 
     @completed_parses.push([*parse, str]) 
     else 
     @new_parses.push([*parse, str, last]) 
     end 
    end 
    end 
    @parses = @new_parses 
    @new_parses = [] 
    parse unless @parses.empty? 
end 

@parses = [[0]] 
@new_parses = [] 
@completed_parses = [] 
parse 
p @completed_parses 

당신에게 줄 것이다 : 당신이 당신의 대답에 ["ab","aab","ab","ba","bab"]이 왜

[["aba", "aba", "bb", "ab"], ["ab", "aa", "ba", "bb", "ab"]] 

을하지 않습니다.

관련 문제