public static IList <IList <string> > GroupAnagrams(string[] strs)
        {
            var groupAnagrams = new List <IList <string> >();

            var groupAnagramsWithKeys = new Dictionary <string, IList <string> >();

            foreach (string s in strs)
            {
                string key = HashKeys.ConvertHashKeys(s);
                if (groupAnagramsWithKeys.ContainsKey(key))
                {
                    var anagrams = groupAnagramsWithKeys[key];
                    anagrams.Add(s);
                    groupAnagramsWithKeys[key] = anagrams;
                }
                else
                {
                    var anagrams = new List <string>();
                    anagrams.Add(s);
                    groupAnagramsWithKeys.Add(key, anagrams);
                }
            }

            foreach (var value in groupAnagramsWithKeys.Values)
            {
                groupAnagrams.Add(value);
            }

            return(groupAnagrams);
        }
        public static void RunTestcaseHashfunction()
        {
            var key = HashKeys.ConvertHashKeys("abcz");


            // var key2 = HashKeys.ConvertHashKeys("xaba");


            // var key3 = HashKeys.ConvertHashKeys("xbaa");
        }
        public static void RunTestcaseHashfunction()
        {
            var key = HashKeys.ConvertHashKeys("abc");

            Debug.Assert(key.CompareTo("1-1-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0") == 0);

            var key2 = HashKeys.ConvertHashKeys("xaba");

            Debug.Assert(key2.CompareTo("2-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-1-0-0") == 0);

            var key3 = HashKeys.ConvertHashKeys("xbaa");

            Debug.Assert(key3.CompareTo("2-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-1-0-0") == 0);
        }