Java Solution
\nclass CombinationIterator {\n    private String s;\n    Queue<String> q;\n    \n    private void getCombination(int start, int length, StringBuilder txt){\n  
```\nclass CombinationIterator {\n    private String s;\n    Queue<String> q;\n    \n    private void getCombination(int start, int length, StringBuilder txt){\n        if(length == 0){\n            q.add(txt.toString());\n            return;\n        }\n        \n        for(int i = start; i<= s.length() - length; ++i){\n            txt.append(s.charAt(i));\n            getCombination(i+1, length-1, txt);\n            txt.deleteCharAt(txt.length() - 1);\n        }\n    }\n    public CombinationIterator(String characters, int combinationLength) {\n        s = characters;\n        q = new LinkedList();\n        \n        getCombination(0, combinationLength, new StringBuilder());\n    }\n    \n    public String next() {\n        return q.poll();\n    }\n    \n    public boolean hasNext() {\n        return !q.isEmpty();\n    }\n}\n\n```
[]