Sum-String编码算法

时间:2017-08-15 19:29:16

标签: algorithm data-structures

我正试图解决http://www.geeksforgeeks.org/nutanix-interview-experience-set-1-on-campus-for-internship/中的第一个问题。在这个问题中,我们给出了一串十进制数字,我们必须弄清楚是否有某种方法可以将它分成四个或更多个子串[“ A ”,“ B “,” C “,...],以便 A + B = C B + C = D 等。

例如,如果字符串为"12358",则答案为true,因为我们可以将其拆分为[“1”,“2”,“3”,“5”, “8”],其中1 + 2 = 3,2 + 3 = 5,3 + 5 = 8。

同样,如果字符串为"199100199",则答案为true,因为我们可以将其拆分为[“1”,“99”,“100”,“199”],其中1 + 99 = 100和99 + 100 = 199。

但是,如果字符串是"2368",那么答案是false,因为只有办法将其分解为四个或更多个子串 - 即[“2”,“3”,“ 6“,”8“] - 和3 + 6≠8。

我可能会想到使用两个或三个嵌套循环的解决方案,但我认为我需要一个更有效的解决方案?

1 个答案:

答案 0 :(得分:1)

public static boolean test3(String s, String d1, String d2, int idx1, int idx2) {
    if(idx1>=s.length()) return false;
    if(idx2>=s.length()) {
        d1 = s.substring(0,idx1);
        return test3(s,d1,d2,idx1+1,1);
    }
    if(!d1.isEmpty() && d1.length()+idx2<=s.length()) {
        d2 = s.substring(d1.length(),d1.length()+idx2);
        int sum = Integer.parseInt(d1) + Integer.parseInt(d2);
        String sumStr = Integer.toString(sum);
        if(s.substring(d1.length()+d2.length()).startsWith(sumStr)) {
            return true;
        } else {
            return test3(s,d1,d2,idx1,idx2+1);
        }
    } else {
        d1 = s.substring(0,idx1);
        return test3(s,d1,d2,idx1+1,idx2);

    }
}

我尝试了上述内容,似乎有效。这是我的解决方案