3
\$\begingroup\$

I have implemented a solution for finding all anagrams. Are there any other suggestions for improving the solution?

package main.algorithms;

import java.util.ArrayList;
import java.util.List;

public class AllAnagrams {
    // Sliding window
    public static void main(String args[]) {
        // s: "cbaebabacd" p: "abc"
        String str = "cbaebabacd";
        String partial = "abc";
        findAnagrams(str, partial);
    }

    public static void findAnagrams(String s, String p){
        List<Integer> list = new ArrayList<>();
        if (s == null || s.length() == 0 || p == null || p.length() == 0) return;
        int[] hash = new int[256]; //character hash
        //record each character in p to hash
        for (char c : p.toCharArray()) {
            hash[c]++;
        }
        //two points, initialize count to p's length
        int left = 0, right = 0, count = p.length();
        while (right < s.length()) {
            //move right everytime, if the character exists in p's hash, decrease the count
            //current hash value >= 1 means the character is existing in p
            if (hash[s.charAt(right++)]-- >= 1) count--;

            //when the count is down to 0, means we found the right anagram
            //then add window's left to result list
            if (count == 0) list.add(left);

            //if we find the window's size equals to p, then we have to move left (narrow the window) to find the new match window
            //++ to reset the hash because we kicked out the left
            //only increase the count if the character is in p
            //the count >= 0 indicate it was original in the hash, cuz it won't go below 0
            if (right - left == p.length() && hash[s.charAt(left++)]++ >= 0) count++;
        }
        System.out.println(list);
    }


}
\$\endgroup\$
  • \$\begingroup\$ What the inputs s and p mean, and what is the expected output? And what does this have to do with anagrams? \$\endgroup\$ – Ralf Kleberhoff Aug 6 at 13:16
  • \$\begingroup\$ Are you looking for readability or performance? \$\endgroup\$ – Ted Brownlow Aug 10 at 3:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.