Python - Easy & Readable - Simple Solution - One line
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\nclass CombinationIterator:\n    from itertools import combinations\n\n    def __init__(self, characters: str, combinationLength: int):\n        self.comb = list(combinations(characters, combinationLength))\n        \n\n    def next(self) -> str:\n        return \'\'.join(self.comb.pop(0))\n\n    def hasNext(self) -> bool:\n        return len(self.comb)\n        \n\n\n# Your CombinationIterator object will be instantiated and called as such:\n# obj = CombinationIterator(characters, combinationLength)\n# param_1 = obj.next()\n# param_2 = obj.hasNext()\n```
['Python3']