Compruebe si una string numérica se puede dividir en substrings que tengan una diferencia entre números consecutivos igual a K

Dada una string numérica S que consta de N dígitos y un entero positivo K , la tarea es verificar si la string dada se puede dividir en más de una substring con una diferencia entre las substrings consecutivas igual a K .

Ejemplos:

Entrada: S = “8642”, K = 2
Salida:
Explicación: Divida la string dada como {“8”, “6”, “4”, “2”}. Ahora, la diferencia entre las substrings consecutivas es K(= 2).

Entrada: S = “1009896”, K = 0
Salida: No

Enfoque: el problema dado se puede resolver generando todas las substrings posibles de la string dada y verificando si la concatenación de cualquier subconjunto de la substring generada es igual a la string dada S y la diferencia consecutiva del número como una substring es K , entonces imprimir . De lo contrario , imprima No. Siga los pasos a continuación para resolver el problema:

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a numeric string
// can be split into substrings such that
// the difference between the consecutive
// substrings is K
void isPossible(string s, int K)
{
    bool valid = false;
    long firstx = -1;
 
    // Stores the size of the string
    int n = s.length();
 
    // Iterate over the range [1, N] and
    // try each possible starting number
    for (int i = 1; i <= n / 2; ++i) {
 
        long x = stol(s.substr(0, i));
        firstx = x;
 
        // Convert the number to string
        string test = to_string(x);
 
        // Build up a sequence
        // starting with the number
        while (test.length() < s.length()) {
            x -= K;
            test += to_string(x);
        }
 
        // Compare it with the
        // original string s
        if (test == s) {
            valid = true;
            break;
        }
    }
 
    // Print the result
    cout << ((valid == true) ? "Yes " : "No");
}
 
// Driver Code
int main()
{
    string S = "8642";
    int K = 2;
    isPossible(S, K);
 
    return 0;
}

Python3

# python 3 program for the above approach
 
# Function to check if a numeric string
# can be split into substrings such that
# the difference between the consecutive
# substrings is K
def isPossible(s,K):
    valid = False
    firstx = -1
 
    # Stores the size of the string
    n = len(s)
 
    # Iterate over the range [1, N] and
    # try each possible starting number
    for i in range(1,n//2+1,1):
        x = int(s[0:i])
        firstx = x
 
        # Convert the number to string
        test = str(x)
 
        # Build up a sequence
        # starting with the number
        while (len(test) < len(s)):
            x -= K
            test += str(x)
 
        # Compare it with the
        # original string s
        if (test == s):
            valid = True
            break
 
    # Print the result
    print("Yes") if valid == True else print("No")
 
# Driver Code
if __name__ == '__main__':
    S = "8642"
    K = 2
    isPossible(S, K)
     
    # This code is contributed by ipg2016107.

Javascript

<script>
 
// JavaScript program for the above approach
 
// Function to check if a numeric string
// can be split into substrings such that
// the difference between the consecutive
// substrings is K
function isPossible(s, K)
{
    let valid = false;
    let firstx = -1;
 
    // Stores the size of the string
    let n = s.length;
 
    // Iterate over the range [1, N] and
    // try each possible starting number
    for (let i = 1; i <= n / 2; ++i) {
 
        let x = (s.substr(0, i));
        firstx = x;
 
        // Convert the number to string
        let test = x.toString();
 
        // Build up a sequence
        // starting with the number
        while (test.length < s.length) {
            x -= K;
            test += x.toString();
        }
 
        // Compare it with the
        // original string s
        if (test == s) {
            valid = true;
            break;
        }
    }
 
    // Print the result
    document.write((valid == true) ? "Yes " : "No");
}
// Driver Code
 
    let S = "8642";
    let K = 2;
    isPossible(S, K);
     
</script>
Producción: 

Yes

 

Tiempo Complejidad: O(N 2 )
Espacio Auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por manupathria y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *