2017-09-30 8 views
0

2つの文字列がアナグラムであるかどうかを確認する必要がありますが、配列を使用することはできません。ソート... forループを使用する必要があることはわかっていますが、chararrayをアルファベット順にソートする方法はわかりません。私を助けてください。文字列を手動でループで並べ替えるには?

import java.util.Scanner; 
public class Assignement3{ 
public static void main (String[] args) { 
    Scanner sc=new Scanner(System.in); 
    System.out.println("Please, type the first word: "); 
    String word1=sc.nextLine(); 
    System.out.println("Please, type the second word: "); 
    String word2=sc.nextLine(); 
    String word1lower=word1.toLowerCase().replace(" ",""); 
    String word2lower=word2.toLowerCase().replace(" ",""); 
    System.out.println("Your First word is: " + word1lower); 
    System.out.println("Your Second word is: " + word2lower); 
    char[] firstword=word1lower.toCharArray(); 
    char[] secondword=word2lower.toCharArray(); 
    } 
    }` 
+1

[ "誰かが私を助けることはできますか?"質問ではありません](http://meta.stackoverflow.com/q/284236)。何が必要なのかをはっきりと特定する必要があります。 –

+0

したがって、最も簡単なことは、独自のソート方法を作成し、各要素が同じ長さであれば、ループチェックのためのdoubleを実行することでしょう。この状況では、Asciiテーブルが役立つかもしれません。 – user2023608

+0

charlrayがアルファベット順にソートされるように、私に説明したりforループを書く人が必要です – Augustas

答えて

1

私は2つの文字列が互いの有意義または実際のアナグラムであるかどうかを決定するコードを提供することは辞書で検索を行うことが必要となると思います。しかし、単語のアナグラムを元の単語の既存の文字の順列として定義すると、これをかなり簡単に確認できます。

以下のコードスニペットでは、最初の単語の文字をマップに読み込み、各文字の出現回数をカウントしています。この文字のマップは、潜在的なアナグラムを形成するために利用可能なすべてを表す。 2番目の単語を反復し、消費された各文字を追跡することによって、2番目の単語がアナグラムであるかどうかを知ることができます。失敗のマーカーは、表示されていないか、すでに使い果たされている文字を使用しようとしています。それ以外の場合は、2番目の単語は潜在的なアナグラムです。再び

String word1lower = "hala babel"; 
String word2lower = "baha label"; 
char[] firstword = word1lower.toCharArray(); 
char[] secondword = word2lower.toCharArray(); 

Map<Character, Integer> m1 = new HashMap<>(); 
int count = 0; 
for (char c : firstword) { 
    Integer cnt = m1.get(c); 
    m1.put(c, cnt == null ? 1 : cnt.intValue() + 1); 
    ++count; 
} 
boolean isAnagram = true; 
for (char c : secondword) { 
    Integer cnt = m1.get(c); 
    if (cnt == null || cnt.intValue() == 0) { 
     isAnagram = false; 
     break; 
    } 
    m1.put(c, cnt.intValue() - 1); 
    --count; 
} 

if (isAnagram && count == 0) { 
    System.out.println("Second word is a full anagram of the first word."); 
} 
else if (isAnagram) { 
    System.out.println("Second word is a partial anagram of the first word."); 
} 
else { 
    System.out.println("Second word is not an anagram of the first word."); 
} 

文字のランダムな組み合わせは、実際の英語(または他の言語)に対応しているかどうかをチェックするので、私は単語辞書が必要になり、ここで可能性アナグラムを言います。これは、過去の単一のStack Overflow質問の範囲を超えていますが、うまくいけば私の答えはあなたが正しい方向に考えさせるようにします。ここ

デモ:

Rextester

+0

これはうまくいかず、入力 "hello"とか "これはそれがアナグラムであると言うでしょう。 '' 'と' 'こんにちは' 'は非対称である。 –

+0

@AndyTurner 3行目の変更を行って、2番目の単語が最初の単語のすべての文字を消費することを確認しました。ここでの問題は、OPがアナグラムを扱う方法であると思います。あるいは、アナグラムが何であるかという私の最初の仮定は間違っていたかもしれません。 –

関連する問題