有效的0和1字符串递归

时间:2015-03-07 06:59:15

标签: algorithm recursion data-structures

我想编写一个递归算法来计算一个1和0的字符串,并确定该字符串是否有效。如果字符串连续包含3个零,则该字符串无效。

例如:

1010010001无效

1111101101有效

1000111101无效

我不知道如何编写这个算法。感谢您的任何帮助。

2 个答案:

答案 0 :(得分:3)

你可以这样做(假设 str 是你的字符串, n 是它的长度,索引是基于0)

           func ( index )
               if index >= n
                  return true 
               if index < 2
                  return func(index+1)
               if str[index] is 0 and str[index-1] is 0 and str[index-2] is 0
                  return false
               return func(index+1)

             // call func(0) , assuming str is global , also answer is boolean
             answer = func(0) 

时间复杂度 O(n)。只是为了完成这样一个直截了当 我只是使用循环迭代地编写它。

        //This is in c/c++
        bool answer = true;
        for(i = 2;i < n;i++)
        {
            if(str[i] == '0' && str[i-1] == '0' && str[i-2] == '0')
                  answer = false;
        }

答案 1 :(得分:0)

public static boolean isValid(String s){
        return isValidInt(s)==3;
    }

    private static int isValidInt(String s){
        if( s == null || s.length() ==0)
                return 0;
        int prevSum=isValidInt(s.substring(1));
        if( prevSum == 3 )
            return 3;
        return s.charAt(0) != '0' ?0:1+prevSum;
    }