単語がグリッドに存在する場合、2Dボードや単語を考えると、見つけます。
単語は「隣接」セルが水平方向または垂直方向に隣接するもので順次隣接するセルの文字から構成することができます。同じ文字セルは、複数回使用することはできません。
例:
ボード= [ [ 'A'、 'B'、 'C'、 'E']、 [ 'S'、 'F'、 'C'、 'S']、 [ 'A'、 'D'、E ' 」、 'E'] ] 単語を考える= "ABCCED"、trueを返します。 単語= "SEE"を考えると、trueを返します。 与えられた単語= "ABCB"、リターンはfalse。
時間:O(M * N * 4 ^ |ワード|)
1 クラスソリューション{ 2 のint 行; 3 int型コル。 4 パブリック ブールが存在(CHAR [] []ボード、文字列の単語){ 5 行= board.length。 6 COL =ボード[0 ] .LENGTH。 7つの ブール [] []訪問= 新しい ブール[行] [COL]。 8 用(INT I 0 =; I <行; I ++ ){ 9 用(INT J = 0; J <COL; J ++ ){ 10 IFが(ヘルパー(ボード、訪問、ワード、I、J、0 )){ 11 リターン 真。 12 } 13 } 14 } 15 リターン 偽。 16 } 17 18 プライベート ブールヘルパー(CHAR [] []基板は、ブール、[] []訪問し、文字列の単語をint型 Iを、INT J、int型のインデックス){ 19 であれば(インデックス== word.length()){ 20 リターン 真; 21 } 22 もし(I <0 || I> =行|| J <0 || J> = COL){ 23 リターン 偽。 24 } 25 であれば(word.charAt(インデックス)==ボード[I] [J] &&!訪問[I] [J]){ 26 訪問[I] [J] = 真。 27 ブール RES =ヘルパー(ボード、訪れた、単語、I + 1、J、インデックス+ 1)|| 28 ヘルパー(ボード、訪れた、単語、I - 1、jを、インデックス+ 1)|| 29 ヘルパー(ボード、訪れた、単語、I、J + 1、インデックス+ 1)|| 30 ヘルパー(ボード、訪れた、単語、I、J - 1、インデックス+ 1 ); 31 //クリーンアップの必要が訪問した 32 訪問[I] [J] = 偽の; 33 リターンのres; 34 } 35 36 リターン 偽。 37 } 38 }