谷歌店面 fail

谷歌店面
input: an array of char, such as {a,b,c}
设计一个方法,每一次被调用就返回一个string,由input array 里面的char组成。 要求是,1)每次输出的string,前面都没有出现过 2)输出的string要尽可能的compact, 不能是a, aa, aaa, aaaa,…

follow up:
3) 相同的字符不能连续出现超过 n 次

follow up就是把hashset 改成 hashmap?

class TextGenerator(object):
    def __init__(self, chars):
        self.charset = chars
        self.current = ''''
    
    def get_next(self):
        self.current = self.next_string(self.current)
        return self.current
    
    def next_string(self, s):
        if s == '''':
            res = self.charset[0]
        else:
            idx = self.charset.find(s[-1])
            if idx < len(self.charset) - 1:
                res = s[:-1] + self.charset[idx+1]
            else:
                ss = self.next_string(s[:-1])
                res = ss + self.charset[0]
        return res

请问楼主多久收到消息的

很好的解法,跟面试官提示我的方法一样。
他给的提示是,“你知道10进制的数与n进制的数怎么转换吗”

2天 zszszszs

一个字符串可以重复使用char里面的字符吗

public class stringcreateor {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    char[] input = {'a','b','c'};
    System.out.println(get_next(input));
    String s = "";
    while(true) {
        s = next_string(input, s);
        System.out.println(s);
    }
 
    }
 
    private static String get_next(char[] charset) {
        // TODO Auto-generated method stub
        String current = next_string(charset, "");
        return current;
    }
 
    private static String next_string(char[] charset, String s) {
        // TODO Auto-generated method stub
        String result = "";
        if(s.isEmpty()) {
            return result + charset[0];
        }
        else {
            int idx = -1;
            for(int i = 0; i < charset.length; i++) {
                if(charset[i] == s.charAt(s.length()-1)) {
                    idx = i;
                    break;
                }
            }
            if(idx >= 0) {
                if(idx < charset.length - 1) {
                    result = s.substring(0, s.length()-1) + charset[idx + 1];
                }
                else {
                    String ss = next_string(charset, s.substring(0, s.length()-1));
                    result = ss + charset[0];
                }
            }
        }
        return result;
    }
 
}