Sha256: 2273a59600b4b95bf925812912aa2e08e45c7faef20038d8740f5e8f66930b13

Contents?: true

Size: 1.18 KB

Versions: 287

Compression:

Stored size: 1.18 KB

Contents

import java.util.*;

public class Anagram {

    private final AnagramSubject anagramSubject;

    public Anagram(String word) {
        anagramSubject = new AnagramSubject(word);
    }

    public List<String> match(List<String> candidates) {
        List<String> anagrams = new ArrayList<String>();

        for (String candidate : candidates) {
            if (anagramSubject.anagramOf(candidate)) {
                anagrams.add(candidate);
            }
        }

        return anagrams;
    }

    static final class AnagramSubject {

        private final String word;
        private final char[] fingerprint;

        public AnagramSubject(String other) {
            this.word = other;
            this.fingerprint = canonicalize(other);
        }

        public boolean anagramOf(String other) {
            return !duplicate(other) && Arrays.equals(fingerprint,canonicalize(other));
        }

        private boolean duplicate(String other) {
            return word.equalsIgnoreCase(other);
        }

        private char[] canonicalize(String other) {
            char[] chars = other.toLowerCase().toCharArray();
            Arrays.sort(chars);
            return chars;
        }
    }
}

Version data entries

287 entries across 287 versions & 1 rubygems

Version Path
trackler-2.2.1.69 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.68 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.67 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.66 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.65 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.64 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.63 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.62 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.61 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.60 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.59 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.58 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.57 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.56 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.55 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.54 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.53 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.52 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.51 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
trackler-2.2.1.50 tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java