題目描述

當兩字串是由相同的字元組成時,被稱作變位詞。變位詞可能有不同的字元排序方式,舉例來說「CAT」的變位詞有「CAT」、「ACT」、「TAC」、「TCA」、「ATC」和「CTA」。



給定兩個字串,如果他們是變位詞的話,輸出「Anagrams」,否則輸出「Not Anagrams」。每個字串最多包含50個英文字母,大小寫不同的字母視為不同的字元。

原題網址

https://www.hackerrank.com/challenges/java-anagrams

範例輸入1

anagram
margana

範例輸出1

Anagrams

範例輸入2

anagramm
marganaa

範例輸出2

Not Anagrams

解題概念

先判斷兩字串的長度是否相同,如果不相同,兩字串必定不是變位詞。

接著將兩字串轉為字元陣列,使用Arrays類別所提供的sort方法來進行排序。然後依序比較兩字元陣列的元素是否相同,如果相同,表示兩字串為變位詞;如果不相同,表示兩字串不是變位詞。

參考答案

import java.util.Arrays;
import java.util.Scanner;

public class Solution {

    private static boolean isAnagram(final String A, final String B) {
        final int lengthA = A.length();
        final int lengthB = B.length();
        if(lengthA != lengthB){
            return false;
        }
        final char[] a = A.toLowerCase().toCharArray();
        final char[] b = B.toLowerCase().toCharArray();
        Arrays.sort(a);
        Arrays.sort(b);
        for(int i = 0; i < lengthA; ++i){
            if(a[i] != b[i]){
                return false;
            }
        }
        return true;
    }

    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final String A = sc.next();
        final String B = sc.next();
        final boolean ret = isAnagram(A, B);
        if (ret) {
            System.out.println("Anagrams");

        } else {
            System.out.println("Not Anagrams");
        }
    }
}