# Solving Leetcode Interviews in Seconds with AI: Groups of Special-Equivalent Strings


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "893" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> You are given an array of strings of the same length words. In one move, you can swap any two even indexed characters or any two odd indexed characters of a string words[i]. Two strings words[i] and words[j] are special-equivalent if after any number of moves, words[i] == words[j].  For example, words[i] = "zzxy" and words[j] = "xyzz" are special-equivalent because we may make the moves "zzxy" -> "xzzy" -> "xyzz".  A group of special-equivalent strings from words is a non-empty subset of words such that:  Every pair of strings in the group are special equivalent, and The group is the largest size possible (i.e., there is not a string words[i] not in the group such that words[i] is special-equivalent to every string in the group).  Return the number of groups of special-equivalent strings from words.   Example 1:  Input: words = ["abcd","cdab","cbad","xyzz","zzxy","zzyx"] Output: 3 Explanation:  One group is ["abcd", "cdab", "cbad"], since they are all pairwise special equivalent, and none of the other strings is all pairwise special equivalent to these. The other two groups are ["xyzz", "zzxy"] and ["zzyx"]. Note that in particular, "zzxy" is not special equivalent to "zzyx".  Example 2:  Input: words = ["abc","acb","bac","bca","cab","cba"] Output: 3    Constraints:  1 <= words.length <= 1000 1 <= words[i].length <= 20 words[i] consist of lowercase English letters. All the strings are of the same length.  

	# Explanation
	Here's the breakdown of the solution:

*   **Key Idea:** Two strings are special-equivalent if the sorted characters at even indices are the same and the sorted characters at odd indices are the same.
*   **Normalization:** For each word, extract the even-indexed characters and odd-indexed characters, sort them independently, and then concatenate them into a normalized string. This normalized string serves as a unique identifier for special-equivalence.
*   **Counting Groups:** Use a set to store the unique normalized strings. The size of the set represents the number of special-equivalent groups.

*   **Complexity:**  O(N * L * log(L)) time, O(N * L) space, where N is the number of words and L is the length of each word.

	
	# Code
	```python
	def numSpecialEquivGroups(words):
    """
    Counts the number of special-equivalent groups of strings.

    Args:
        words: A list of strings.

    Returns:
        The number of special-equivalent groups.
    """
    normalized_words = set()
    for word in words:
        even_chars = sorted(word[::2])
        odd_chars = sorted(word[1::2])
        normalized_word = "".join(even_chars) + "".join(odd_chars)
        normalized_words.add(normalized_word)
    return len(normalized_words)
	```
			
