Skip to content

Solved Problem1 - Group Anagrams, Problem 2 - Isomorphic strings and Problem 3 - Word pattern#2290

Open
anirudhv98 wants to merge 1 commit into
super30admin:masterfrom
anirudhv98:master
Open

Solved Problem1 - Group Anagrams, Problem 2 - Isomorphic strings and Problem 3 - Word pattern#2290
anirudhv98 wants to merge 1 commit into
super30admin:masterfrom
anirudhv98:master

Conversation

@anirudhv98

Copy link
Copy Markdown

Completed Hashing-1, please review

@super30admin

Copy link
Copy Markdown
Owner

Grouping Anagrams Together (Problem1.cs)

Your solution is correct and handles the problem well. However, there is an opportunity to improve the time efficiency. The current approach sorts each string, which takes O(K log K) time per string. For large strings, this could be a bottleneck.

Consider using an alternative method to generate a key for anagrams without sorting. One common approach is to use a frequency array or a prime number hashing technique. For example, you can assign each letter a prime number and compute the product of primes for all characters in the string. Since multiplication of primes is commutative and unique (due to the fundamental theorem of arithmetic), this product will be the same for anagrams. This method would reduce the key generation time to O(K) per string.

Here's an example of how you might implement the prime hashing in C#:

private int[] primes = new int[] {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101};

public IList<IList<string>> GroupAnagrams(string[] strs) {
    Dictionary<double, List<string>> dict = new Dictionary<double, List<string>>();
    foreach (string str in strs) {
        double hash = 1;
        foreach (char c in str) {
            hash *= primes[c - 'a'];
        }
        if (!dict.ContainsKey(hash)) {
            dict[hash] = new List<string>();
        }
        dict[hash].Add(str);
    }
    return dict.Values.ToList<IList<string>>();
}

Note: Be cautious with large numbers; using double might lead to precision issues for very long strings. Alternatively, you can use a BigInteger in C# to avoid overflow, but for the constraints (string length <= 100), double should be sufficient.

Another alternative is to use a frequency string as the key. For each string, create a character count array and convert it to a string (e.g., "#2#0#0...#1" for "aab" where 2 is count of 'a', 1 is count of 'b', etc.). This also runs in O(K) time per string.

Your current solution is acceptable and passes on LeetCode, but for optimal performance, especially in scenarios with long strings, consider one of these alternatives.

VERDICT: PASS


Isomorphic Strings (Problem2.cs)

spat spat策 spat spat策棣 escl spat escl棣棣棣 spat策 spat棣策棣 escl策策棣 escl棣 spat escl策 escl spat棣棣棣棣棣棣棣 spat棣棣棣 escl spat棣 spat策棣 spat escl spat棣棣 escl escl棣 spat棣棣棣棣棣 escl spat escl escl spat棣棣 spat策 spat escl escl spat棣棣棣 spat棣棣 escl棣棣 spat策 escl spat策棣棣 escl棣棣棣策 spat spat棣棣 spat棣策 escl棣 spat棣棣棣棣 spat棣棣棣 spat spat棣棣 escl棣棣 spat棣 spat spat棣 spat棣 spat spat棣策策 spat spat escl棣棣棣棣 spat棣 escl棣策棣 escl棣 escl spat escl escl spat棣棣棣 escl策 spat棣策 spat棣棣棣棣棣棣 spat spat escl escl棣棣棣 spat棣 spat棣棣棣 spat spat棣棣 spat spat spat棣 spat棣 escl策棣棣 escl escl策棣棣棣棣棣棣 spat棣 escl棣棣 escl棣 spat spat策棣策棣棣棣棣 spat棣棣 spat spat棣棣策棣 spat escl spat策策 escl棣棣棣 spat棣策棣棣 spat棣 escl spat escl棣 spat spat escl棣棣棣棣 spat棣 spat spat棣棣棣 escl棣棣棣棣棣棣棣策棣棣 spat spat spat棣棣策策策棣棣 spat spat棣 spat棣 spat棣棣棣 spat spat spat策策策 spat棣棣 spat棣 spat棣策 escl escl棣棣棣棣棣 spat spat spat棣棣 escl棣 escl棣棣 spat棣 spat棣 spat棣棣棣棣棣棣 escl棣棣棣棣 spat escl escl棣棣棣 spat spat spat escl棣 spat棣策棣 spat escl棣策 spat spat棣棣策棣棣 escl棣策 spat策棣策棣棣棣 escl棣棣棣棣 spat spat spat escl spat spat棣棣棣 escl棣 spat棣棣棣棣棣策 escl棣 escl escl spat棣棣 spat棣棣 spat escl棣 escl策 spat棣棣棣棣 spat棣 spat escl spat策棣策 escl spat棣棣棣 spat spat棣棣策棣棣 spat escl棣策棣棣 spat棣棣 spat棣 escl spat spat spat spat棣棣棣棣棣 spat escl棣 spat spat棣 spat棣棣策策棣 spat spat escl棣 spat spat escl escl棣棣棣 spat spat棣 spat棣策棣棣 spat棣策棣 escl策棣 escl棣棣策棣棣棣棣棣棣棣 spat棣 spat escl策棣 spat spat棣棣 spat spat escl spat棣 spat escl棣策棣 spat棣棣 escl escl棣 spat spat策棣 spat escl棣 escl棣 spat spat spat棣棣 escl spat spat棣棣 spat escl spat棣棣棣 spat spat棣棣 spat棣 spat escl棣棣棣棣 spat spat棣策 spat spat棣棣棣棣 spat棣 spat escl棣棣棣棣 spat棣 escl棣 spat棣 spat spat棣 escl spat棣 escl escl spat spat棣 spat escl棣 spat spat棣棣 spat棣 spat棣棣策 escl spat spat棣棣棣 spat spat spat棣棣 spat escl spat棣 spat escl棣棣棣 spat棣策棣 escl棣棣棣棣棣棣 escl棣棣 escl棣棣棣 spat spat spat棣 spat棣 spat spat escl策策 escl棣 spat棣 spat棣 spat棣棣 spat棣棣棣棣棣棣棣棣棣 spat棣棣棣棣棣棣棣棣 spat escl棣 spat策 spat棣棣 escl spat spat escl棣棣棣 spat棣 spat escl棣 spat spat spat escl棣棣棣棣 spat escl棣 spat棣棣 spat escl spat棣策 escl spat escl棣棣棣棣 spat棣 spat策 escl棣棣 spat棣策策棣棣 escl escl spat策 spat策棣 spat棣 spat策策 spat棣棣策棣棣 spat棣棣棣 spat棣棣棣 escl escl escl spat棣棣棣 spat spat棣棣 spat spat棣 spat棣棣 escl spat spat棣 spat棣 spat棣棣棣 spat棣 spat策 spat棣棣 escl escl棣棣 escl spat棣 spat棣棣 spat spat棣 spat spat策 spat escl棣 spat escl escl策 spat escl spat棣棣棣棣策 escl spat spat棣棣 escl spat spat spat spat spat策棣 spat棣棣棣策棣 spat策棣棣 spat策 spat策棣 escl棣棣 spat棣棣 spat spat spat策棣 escl escl escl spat棣 spat棣 spat spat棣棣棣 spat spat棣 spat spat棣棣 escl策棣 spat棣 spat棣棣棣 escl棣 spat策 spat spat棣 spat棣棣棣棣 spat spat escl escl棣棣 spat棣 spat棣 spat spat策 escl spat棣棣 spat棣 spat spat spat棣棣棣棣棣棣棣 spat策棣 spat spat escl棣 spat escl棣 spat棣策 escl spat棣棣 escl棣棣策棣 spat棣棣棣 spat棣 spat spat棣棣 spat spat棣棣 spat spat棣棣棣 escl棣 spat spat棣 escl棣棣棣棣 spat棣棣 escl棣 escl escl棣 spat spat spat spat棣 spat spat策棣 spat策棣策棣棣棣棣 spat棣棣棣 escl棣棣 escl spat spat棣 spat棣 escl棣 escl spat策棣棣棣棣棣 escl棣棣棣 spat escl escl spat spat棣策 spat spat棣棣棣棣策棣策策棣棣棣棣 spat spat spat策棣棣策 spat spat spat spat策棣棣 spat spat escl棣棣 escl棣 spat spat棣 spat棣棣 escl棣 spat spat spat策 escl棣棣棣棣棣 spat策 spat spat棣 spat棣棣 spat棣 spat spat棣棣 escl策aba spat棣棣策棣棣棣棣 spat escl策 spat spat棣棣策 spat棣棣棣 escl escl棣 spat spat棣策棣 spat spat棣 spat棣棣棣 spat spat棣 escl棣 spat棣棣棣策棣策棣 spat escl棣棣棣棣 spat棣 spat spat棣 spat棣 spat spat spat escl spat棣棣棣棣棣 spat spat棣策 escl escl棣棣棣棣 escl棣棣 spat棣 spat spat策棣棣 spat棣棣棣 escl棣棣棣策 spat棣棣棣 escl escl棣棣棣棣 spat棣棣 spat spat棣棣棣 escl棣棣 spat棣棣策棣 spat spat spat spat棣 spat棣棣棣 spat棣 spat escl棣 spat spat棣 escl spat棣棣棣棣棣 spat escl escl棣 escl棣 spat棣 spat棣棣棣棣棣 spat棣aba策策 escl spat棣棣 spat棣棣 escl spat spat棣 spat spat棣 escl spat escl spat spat spat棣棣 spat spat棣棣棣棣 spat escl棣 spat棣棣 spat spat策 spat策策 spat棣棣棣 spat棣棣 escl棣棣棣 spat escl spat棣棣棣 spat棣 spat escl棣棣棣棣棣棣棣 escl spat棣棣 spat spat棣 spat escl棣 escl棣棣棣 escl棣棣棣棣棣 spat escl棣棣策 spat spat策 spat棣策棣棣 escl棣棣棣 spat策棣棣 spat棣 spat escl spat棣棣 spat策 spat spat棣棣 escl escl棣棣棣棣棣棣策 spat spat策棣棣 spat棣 spat escl escl棣 spat spat spat策棣棣 spat策棣 spat棣棣 spat棣棣棣 escl棣 spat spat spat策棣棣策 escl棣 spat spat spat spat棣 spat棣棣 spat escl spat棣棣策棣策 spat spat棣 spat策策策棣棣棣棣 spat策 escl escl策 spat策棣棣棣棣棣棣棣 spat棣 spat棣 spat棣棣 spat策 spat escl棣 spat spat spat策棣棣棣 spat escl棣 escl策棣 spat策棣策策策 spat棣 spat策 escl棣 spat spat棣 spat棣棣棣棣 escl棣棣 spat棣棣棣 escl escl spat棣 spat策 escl棣棣棣 spat escl spat棣棣棣棣策棣 spat棣棣 spat escl escl棣 escl棣棣棣棣策 spat策棣棣棣 escl棣棣策棣棣 spat棣棣策棣棣 spat策 escl spat escl策 spat spat棣棣 spat escl棣 escl棣棣策棣棣棣棣 spat棣 spat棣棣棣 spat棣棣 escl escl spat棣 spat策棣棣 escl棣棣 escl策 spat棣棣策 spat棣 spat棣棣 spat escl棣 spat策棣棣棣棣棣策 spat策 spat策棣 spat棣 spat spat escl棣 escl棣棣 spat棣策 escl escl棣 spat spat棣策棣棣棣 spat spat棣 spat escl spat棣棣 spat棣棣 spat棣棣 escl棣策 spat策 escl棣棣棣 spat棣棣棣棣棣 spat棣棣 spat spat spat spat spat策棣 spat spat棣 spat spat棣棣 spat spat escl棣棣棣 spat策棣 escl棣 escl棣 spat策棣棣策策 spat棣 spat escl spat escl棣 spat策 spat棣棣棣棣 escl棣棣棣棣策 spat策 escl escl棣 escl棣棣棣棣棣棣策棣策棣棣 spat策棣棣 escl spat spat策 escl棣策棣 spat棣 escl棣 spat spat棣 escl策 escl策棣棣 spat棣棣 escl escl棣棣 spat棣棣策 escl spat棣棣 escl棣 spat escl策棣 spat escl棣 escl棣棣 spat棣棣棣棣策棣棣 spat escl spat策棣策棣棣棣 spat棣策棣策 spat棣棣棣棣 spat棣棣策 escl棣 spat棣 spat棣 spat棣 escl escl棣 escl策棣策棣棣棣棣 escl棣棣棣策 spat棣棣 spat棣 escl棣 spat spat spat策棣棣棣 spat spat棣 spat棣棣棣 spat棣棣 spat棣棣棣棣 escl spat棣 escl棣策 spat棣棣棣棣策 spat策棣棣棣策棣 spat spat escl策棣策棣棣棣棣棣棣 spat escl策 spat棣策 spat spat棣 spat棣棣棣 spat棣 spat spat策策棣棣棣 spat escl spat棣策 spat spat棣 escl棣 spat spat策 spat棣策棣策棣棣 escl棣棣策 escl棣 spat棣 escl escl escl spat棣棣棣 spat棣棣棣 spat spat escl escl棣棣策策棣棣棣 spat spat escl

VERDICT: NEEDS_IMPROVEMENT


Word Pattern (Problem3.cs)

Your solution is correct and efficient. You have correctly implemented the bijection check by using a dictionary for pattern-to-word mapping and a hash set to ensure that no two pattern characters map to the same word. This is a good approach.

Strengths:

  • You correctly check for the length mismatch at the beginning, which is important.
  • The code is clean and well-commented.
  • You have considered both directions of mapping: pattern to word (using dictionary) and word to pattern (using hash set to ensure uniqueness).

Areas for Improvement:

  • While your solution is correct, it is slightly different from the common approach of using two dictionaries (one for each direction). Using two dictionaries (one for pattern char to word and one for word to pattern char) might make the code more symmetric and easier to understand. For example, in your current code, the hash set only stores words to check for duplicates, but it doesn't store which pattern character they are mapped to. This is sufficient for uniqueness, but if you needed to retrieve the pattern character for a word (for some reason), you wouldn't have that information. However, for this problem, it is not necessary.
  • You might want to consider edge cases more explicitly, such as when the pattern is empty or the string is empty, but your current code should handle these because the length check would catch them.

Overall, your solution is excellent. Keep up the good work!

VERDICT: PASS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants