2017-11-20 8 views
-2

与えられた文字列を主な文字列から形成できるかどうか、Javaで調べる必要があるかどうかを調べる必要があります。与えられた文字列がJavaの別の文字列から形成されるかどうかをチェックする方法は?

例:

入力

メイン文字列 - lhLoe

ハロー

ウナギ

EL、$ H。

出力リレー:

こんにちは:YES

ウナギ:NO

EL、$ H。 :YES

私は順列で試すことができますが、最初の文字列が長い場合は時間がかかります。これを行う他の方法?

注:特殊文字は無視できます。

+0

あなたが試したことが正しく動作しないことを教えてください。 – csmckelvey

答えて

0

正規表現を使用して文字列を文字グループとして定義できます。あなたは、配列内の指定された主な文字列内の各文字の出現を格納することができ

String search="lhLoe"; 
    String input="HELLO"; 
    input=input.replaceAll("^[a-zA-Z1-9]",""); 
    Pattern p = Pattern.compile("^["+search+"]+$",Pattern.CASE_INSENSITIVE); 
    Matcher m = p.matcher(input); 
    boolean b = m.matches(); 
+0

これは 'hello'と' heel'のために真を返します - 私が望んでいないと思われるもの。 – slim

0

:このような

何か。 (配列aとしましょう)

与えられたテスト文字列に対して同じ手順を繰り返します。

テスト文字列(配列b)の各文字の出現が、メイン文字列(配列a)の対応する文字の出現数に等しい場合、テスト文字列は次のようになります。メインストリングを使用して形成される。

実行時の複雑さは線形になります。

大文字と小文字の区別や特別な記号を付けてください。

1

まず、小文字の両方の文字列、よう:あなたは彼らを無視することができると言うので、

lowerCasedMainString = "hello" 
lowerCasedTargetString = "el,$h" 

次に、特殊文字を削除します。

lowerCasedTargetStringStripped = "elh" 

を使用すると、残りのに取り組むことができ、さまざまな方法があります。問題はありますが、私はこのようなループ(擬似コード)を行います:

while(length of target > 0) { 
    char c = target.charAt(1); 

    if(main contains c) { 
     main = main with that instance of c removed 
    } else { 
     return false 
    } 

    target = target.substring(1); 
} 
return true; 

個々のstこれのepは容易に達成可能でなければならない。このような問題に取り組んでいるなら、おそらくすでにそれを行う方法を見てきたでしょう。それ以外の場合は、スタックオーバーフローに関する既存の回答があります。

関連する問題