LC 87スクランブル文字列
我々は、すべてのカット文字列の場所を確認する必要があります
すなわちS1(0、1、2、...、N-1)、S2(0、1、2、...、N-1)
カット設定点I、文字列に(0〜I-1)、(I〜N-1)
1 = <I <= N-1(iは0を直接に等しい(=)、S1S2か否かを決定することに相当)
二つの可能性があることに注意してください
A)S1(0〜I-1)配S2(0〜I-1)、S1(iは〜N-1)配S2(I〜N-1)
B)S1(0〜I-1)配S2(NI、N-1)、S1(I〜N-1)配S2(0〜NI-1)
また、一致する文字列をチェックする必要がアナグラム、文字列と等圧であり、例えばaabababs、saaaabbb
オカレンスは、文字をチェックするためにINT [26]を使用することができます
異なるfalseを返します
a)またはb)の真式2つの接合見返りに、スクランブル文字列に記載されているときはいつでも、次に再帰式は、両方の場合で調べました
1 クラスソリューション{ 2 公共 ブールisScramble(ストリングS1、文字列s2){ 3 であれば(s1.equals(S2)) 4 戻り 真。 5 INT [] ABC = 新しい INT [26 ]。 図6は、 のために(int型、iはs1.lengthを()<; I = 0 iは++ ){ 7 ABC [s1.charAt(I) - 'A'] ++ ; 8 ABC [s2.charAt(I) - 'A'] - 。 9 } 10 11 のために(int型私は:ABC)を 12 もし(!I = 0 ) 13 リターン はfalse ; 14 15の ために(int型、iはs1.lengthを()<; i = 1からiが++ ){ 16 であれば(isScramble(s1.substring(0、I)、s2.substring(0、I))&& isScrambleは(s1.substring( I)、(I)))s2.substring 17 リターンを 真。 18 であれば(isScramble(s1.substring(0、I)、s2.substring(s2.length() - I))&& isScramble(()、s2.lengthを、(I)s1.substring 0(s2.substring - 私))) 19 リターン 真。 20 } 21 リターン 偽。 22 } 23 }