2017-05-22 13 views
6

Có ai biết làm thế nào tôi có thể kết hợp một mảng các chữ cái lộn xộn với một từ, ví dụ, một số hàm sẽ khớp với một mảng ví dụ ["a", "c", "a" , "e", "c"]; cho một từ "ace" và cho tôi 1 hoặc nếu không -1 như indexOf hoặc InArray nhưng đối với một từ lộn xộn. Tôi đã thực hiện một câu chuyện js với một ví dụ được viết thành tài liệuChức năng đối sánh Jumbled Array thành chuỗi

chỉ là một lưu ý, tôi sẽ so sánh mảng chữ cái ở bất cứ đâu từ 30000 - 50000 từ.

https://jsfiddle.net/AlexanderMitrakis/89dchpt8/1/

this.gameletters = []; //Array of Game letters. 
       //e.g. ["P", "E", "H", "E", "U", "I", "S", "Q", "N"]; 


this.possiblesolution = new String(); //highest solution within gameletters 
       //e.g. "QUEENSHIP" (related to above letters) 

this.wordBank = new Array(); 
       //array of arrays structure is formated around alphabet with an array for each character: 
       /* 
       a: Array(7295) 
       b:Array(7271) 
       c:Array(11381) 
       d:Array(7216) 
       ... 
       y:Array(607) 
       z:Array(623) 
       */ 
+0

nơi nào bạn lưu trữ các từ điển các từ? – karthick

+0

Tôi lưu trữ nó như là một mảng đa chiều như this.wordBank wordBank nó được lưu trữ sắp xếp theo thứ tự bảng chữ cái sau đó bên trong mỗi mảng ký tự được sắp xếp theo thứ tự bảng chữ cái trong ký tự this.wordBank [ký tự] [characterword] – AlexMika

Trả lời

1

Một chiến lược đệ quy là một giải pháp đơn giản, nhưng nếu mảng gameletters của bạn trở nên quá lớn, nó sẽ thực sự làm chậm thực hiện. Đối với một trò chơi như scrabble, nó phải là đủ mặc dù.

Fiddle

var gameletters = ["P", "E", "H", "E", "U", "I", "S", "Q", "N"]; 
var wordbank = { 
    "a": Array(3461), 
    "b": Array(2391), 
    //... 
}; 

var matches = {}; 

function step(word, letters) { 
    for(var i = 0, len = letters.length; i < len; i++) { 

    var arr = letters.map(a => a); 
    if (arr.length === 0) { 
     return; 
    } 

    var letter = arr[i]; 
    arr.splice(i,1); 
    test(word + letter); 

    if (arr.length) { 
     step(word + letter, arr) 
    } 
    } 
} 

function test(word) { 
    var firstLetter = word.substr(0,1); 
    if (wordbank[firstLetter].indexOf(word) >= 0) { 
    matches[word] = 1; 
    } 
} 

step("", gameletters); 
Các vấn đề liên quan