input: Write a Python function that takes a list of coordinate points and a string of tags. Each point corresponds to a tag at the same index, and the function should determine the maximum number of points that can be enclosed by a square centered at the origin, with sides parallel to the axes, and no two points in the square sharing the same tag. The coordinates could be negative or positive, and the side length of the square may be zero.
  
  from typing import List
  
  def max_points_inside_square(points: List[List[int]], s: str) -> int:
      """
      Given a list of points in a 2D plane and a string of tags, each point has a corresponding tag. The goal is to find the largest number of points that can be enclosed in a square centered at the origin, with sides aligned to the coordinate axes, ensuring no two points within the square share the same tag.
  
      Return the maximum number of points that can be within such a square.
  
      Examples:
      >>> points = [[2,2],[-1,-2],[-4,4],[-3,1],[3,-3]], s = "abdca"
      2
      >>> points = [[1,1],[-2,-2],[-2,2]], s = "abb"
      1
      >>> points = [[1,1],[-1,-1],[2,-2]], s = "ccd"
      0
  
      Constraints:
      1 <= len(s), len(points) <= 10^5
      Each point is given by two coordinates
      Coordinates can range from -10^9 to 10^9
      The length of the string s is equal to the number of points
      Each coordinate pair is unique
      The string consists only of lowercase letters
      """
output: def max_points_inside_square(points: List[List[int]], s: str) -> int:
      def count_unique_tags_in_square(points, s, side_len):
          tags_in_square = {}
          for i, (x, y) in enumerate(points):
              if -side_len/2 <= x <= side_len/2 and -side_len/2 <= y <= side_len/2:
                  if s[i] in tags_in_square:
                      return 0
                  tags_in_square[s[i]] = True
          return len(tags_in_square)
      
      max_count = 0
      min_coord = min(-min(x for x, y in points), -min(y for x, y in points))
      max_coord = max(max(x for x, y in points), max(y for x, y in points))
      for side_len in range(1, max_coord - min_coord + 1):
          count = count_unique_tags_in_square(points, s, side_len)
          if count > max_count:
              max_count = count
      return max_count