題目描述
當兩字串是由相同的字元組成時,被稱作變位詞。變位詞可能有不同的字元排序方式,舉例來說「CAT」的變位詞有「CAT」、「ACT」、「TAC」、「TCA」、「ATC」和「CTA」。
給定兩個字串,如果他們是變位詞的話,輸出「Anagrams」,否則輸出「Not Anagrams」。每個字串最多包含50個英文字母,大小寫不同的字母視為不同的字元。
原題網址
範例輸入1
anagram
margana
範例輸出1
Anagrams
範例輸入2
anagramm
marganaa
範例輸出2
Not Anagrams
解題概念
先判斷兩字串的長度是否相同,如果不相同,兩字串必定不是變位詞。
接著將兩字串轉為字元陣列,使用Arrays類別所提供的sort方法來進行排序。然後依序比較兩字元陣列的元素是否相同,如果相同,表示兩字串為變位詞;如果不相同,表示兩字串不是變位詞。
參考答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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"); } } } |