Verifique que la longitud de una string sea igual al número agregado en su última

Dada una string que (puede) ser adjuntada con un número por fin. Debe encontrar si la longitud de la string excluyendo ese número es igual a ese número. Por ejemplo, para «holamundo10», la respuesta es verdadera ya que helloworld consta de 10 letras. La longitud de la string es inferior a 10 000.

Ejemplos: 

Input:  str = "geeks5"
Output:  Yes
Explanation : As geeks is of 5 length and at 
              last number is also 5.

Input:  str = "geeksforgeeks15"
Output:  No
Explanation: As geeksforgeeks is of 13 length and
             at last number is 15 i.e. not equal

Preguntado en: Entrevista de Codenation

Un enfoque ingenuo es atravesar desde el inicio y recuperar el número de la string y verificar si la longitud de la string: dígitos en el número = número o no 

Un método eficiente es hacer los siguientes pasos  

  1. Atraviese la string desde el final y siga almacenando el número hasta que sea más pequeño que la longitud total de la string.
  2. Si el número es igual a la longitud de la string, excepto los dígitos de ese número, devuelve verdadero. 
  3. De lo contrario, devuelve falso.

Implementación:

C++

// C++ program to check if size of string is appended
// at the end or not.
#include <bits/stdc++.h>
using namespace std;
 
// Function to find if given number is equal to
// length or not
bool isequal(string str)
{
    int n = str.length();
 
    // Traverse string from end and find the number
    // stored at the end.
    // x is used to store power of 10.
    int num = 0, x = 1, i = n - 1;
    for (i = n - 1; i >= 0; i--) {
        if ('0' <= str[i] && str[i] <= '9') {
            num = (str[i] - '0') * x + num;
            x = x * 10;
            if(num>=n)
                return false;
        }
        else
            break;
    }
 
    // Check if number is equal to string length except
    // that number's digits
    return num == i + 1;
}
 
// Drivers code
int main()
{
    string str = "geeksforgeeks13";
    isequal(str) ? cout << "Yes" : cout << "No";
    return 0;
}

Java

// Java program to check if size of
// string is appended at the end or not.
import java.io.*;
 
class GFG {
 
    // Function to find if given number is
    // equal to length or not
    static boolean isequal(String str)
    {
        int n = str.length();
 
        // Traverse string from end and find the number
        // stored at the end.
        // x is used to store power of 10.
        int num = 0, x = 1, i = n - 1;
        for (i = n - 1; i >= 0; i--)
        {
            if ('0' <= str.charAt(i) &&
                str.charAt(i) <= '9')
            {
                num = (str.charAt(i) - '0') * x + num;
                x = x * 10;
                if(num>=n)
                    return false;
            }
            else
                break;
        }
 
        // Check if number is equal to string
        // length except that number's digits
        return num == i + 1;
    }
 
    // Drivers code
    static public void main(String[] args)
    {
        String str = "geeksforgeeks13";
        if (isequal(str))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This Code is contributed by vt_m.

Python3

# Python 3 program to check if size of
# string is appended at the end or not.
 
# Function to find if given number
# is equal to length or not
def isequal(str):
 
    n = len(str)
 
    # Traverse string from end and
    # find the number stored at the end.
    # x is used to store power of 10.
    num = 0
    x = 1
    i = n - 1
    for i in range(n - 1, -1,-1) :
        if ('0' <= str[i] and str[i] <= '9') :
            num = (ord(str[i]) - ord('0')) * x + num
            x = x * 10
            if (num>=n):
                return false
     
        else:
            break
 
    # Check if number is equal to string
    # length except that number's digits
    return num == i + 1
 
# Driver Code
if __name__ == "__main__":
     
    str = "geeksforgeeks13"
    print("Yes") if isequal(str) else print("No")
 
# This code is contributed by ChitraNayal

C#

// C# program to check if size of
// string is appended at the end or not.
using System;
 
class GFG {
 
    // Function to find if given number
    // is equal to length or not
    static bool isequal(string str)
    {
        int n = str.Length;
 
        // Traverse string from end and find the number
        // stored at the end.
        // x is used to store power of 10.
        int num = 0, x = 1, i = n - 1;
        for (i = n - 1; i >= 0; i--)
        {
            if ('0' <= str[i] && str[i] <= '9') {
                num = (str[i] - '0') * x + num;
                x = x * 10;
                if(num>=n)
                    return false;
            }
            else
                break;
        }
 
        // Check if number is equal to string
        // length except that number's digits
        return num == i + 1;
    }
 
    // Drivers code
    static public void Main()
    {
        string str = "geeksforgeeks13";
        if (isequal(str))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This Code is contributed by vt_m.

PHP

<?php
// PHP program to check if size
// of string is appended at
// the end or not.
 
// Function to find if given
// number is equal to length or not
function isequal($str)
{
    $n = strlen($str);
 
    // Traverse string from end
    // and find the number stored
    // at the end. x is used to
    // store power of 10.
    $num = 0; $x = 1; $i = $n - 1;
    for ($i = $n - 1; $i >= 0; $i--)
    {
        if ('0' <= $str[$i] &&
                   $str[$i] <= '9')
        {
            $num = ($str[$i] - '0') *
                           $x + $num;
            $x = $x * 10;
            if($num>=$n)
                return false;
        }
        else
            break;
    }
 
    // Check if number is equal
    // to string length except
    // that number's digits
    return $num == $i + 1;
}
 
// Driver code
$str = "geeksforgeeks13";
if(isequal($str))
echo "Yes" ;
else
echo "No";
return 0;
 
// This code is contributed by nitin mittal.
?>

Javascript

<script>
 
// Javascript program to check if size of
// string is appended at the end or not.
 
// Function to find if given number is
// equal to length or not
function isequal(str)
{
    let n = str.length;
 
    // Traverse string from end and find
    // the number stored at the end.
    // x is used to store power of 10.
    let num = 0, x = 1, i = n - 1;
    for(i = n - 1; i >= 0; i--)
    {
        if ('0' <= str[i] &&
            str[i] <= '9')
        {
            num = (str[i] - '0') * x + num;
            x = x * 10;
             
            if (num >= n)
                return false;
        }
        else
            break;
    }
 
    // Check if number is equal to string
    // length except that number's digits
    return num == i + 1;
}
 
// Driver code
let str = "geeksforgeeks13";
 
if (isequal(str))
    document.write("Yes");
else
    document.write("No");
 
// This code is contributed by rag2127
 
</script>

Producción : 

Yes

Complejidad temporal: O(n) donde n es la longitud de la string
Espacio auxiliar: O(1)

Este artículo es una contribución de Sahil Chhabra (akku) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *