|
3 | 3 | import java.util.Arrays;
|
4 | 4 | import java.util.Locale;
|
5 | 5 |
|
| 6 | +/** |
| 7 | + * Check if two strings are anagram (case insensitive) |
| 8 | + * |
| 9 | + */ |
6 | 10 | public class Anagrams {
|
7 |
| - String first; |
8 |
| - String second; |
9 | 11 |
|
10 |
| - public Anagrams(String first, String second) { |
| 12 | + /** |
| 13 | + * First String |
| 14 | + */ |
| 15 | + private final String first; |
| 16 | + |
| 17 | + /** |
| 18 | + * Second String |
| 19 | + */ |
| 20 | + private final String second; |
| 21 | + |
| 22 | + /** |
| 23 | + * Instantiate first and second strings. |
| 24 | + * |
| 25 | + * @param first String |
| 26 | + * @param second String |
| 27 | + */ |
| 28 | + public Anagrams(final String first, final String second) { |
11 | 29 | this.first = first;
|
12 | 30 | this.second = second;
|
13 | 31 | }
|
14 | 32 |
|
| 33 | + public String getFirst() { |
| 34 | + return first; |
| 35 | + } |
| 36 | + |
| 37 | + public String getSecond() { |
| 38 | + return second; |
| 39 | + } |
| 40 | + |
| 41 | + /** |
| 42 | + * Return true if two strings are anagram. |
| 43 | + * |
| 44 | + * @return Boolean |
| 45 | + */ |
15 | 46 | public boolean isAnagram() {
|
| 47 | + int count = 0; |
| 48 | + final int firstLen = first.length(); |
16 | 49 |
|
17 |
| - if ( first.length() != second.length() ) { |
18 |
| - return false; |
19 |
| - } |
20 |
| - Locale locale = Locale.ENGLISH; |
21 |
| - String firstUpper = first.toUpperCase(locale); |
22 |
| - String secondUpper = second.toUpperCase(locale); |
23 |
| - char[] firstCharArr = firstUpper.toCharArray(); |
24 |
| - char[] secondCharArr = secondUpper.toCharArray(); |
25 |
| - Arrays.sort(firstCharArr); |
26 |
| - Arrays.sort(secondCharArr); |
27 |
| - |
28 |
| - for (int i=0; i < first.length(); i++) { |
29 |
| - |
30 |
| - if ( firstCharArr[i] != secondCharArr[i] ) { |
31 |
| - return false; |
| 50 | + if ( equal(firstLen, second.length()) ) { |
| 51 | + |
| 52 | + final char[] firstCharArr = sort(first); |
| 53 | + final char[] secondCharArr = sort(second); |
| 54 | + |
| 55 | + while (count < firstLen) { |
| 56 | + |
| 57 | + if ( !equal(firstCharArr[count], |
| 58 | + secondCharArr[count]) ) { |
| 59 | + break; |
| 60 | + } |
| 61 | + count++; |
32 | 62 | }
|
33 | 63 | }
|
34 | 64 |
|
35 |
| - return true; |
| 65 | + return count == firstLen; |
| 66 | + } |
| 67 | + |
| 68 | + private char[] sort(final String randomStr) { |
| 69 | + final Locale locale = Locale.ENGLISH; |
| 70 | + |
| 71 | + final char[] upperChar = randomStr.toUpperCase(locale) |
| 72 | + .toCharArray(); |
| 73 | + Arrays.sort(upperChar); |
| 74 | + |
| 75 | + return upperChar; |
| 76 | + } |
| 77 | + |
| 78 | + private boolean equal(final int first, |
| 79 | + final int second) { |
| 80 | + return first == second; |
36 | 81 | }
|
37 | 82 | }
|
0 commit comments