Check length of a string is equal to the number appended at its last
Given a string that (may) be appended with a number at last. You need to find whether the length of string excluding that number is equal to that number. For example for “helloworld10”, answer is True as helloworld consist of 10 letters. Length of String is less than 10, 000.
Examples :
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
Asked in: Codenation Interview
A Naive approach is to traverse from starting and retrieve the number from string and check if length of string – digits in the number = number or Not
An efficient method is to do following steps
- Traverse string from end and keep storing the number till it is smaller than the length of the overall string.
- If the number is equal to length of string except that number’s digits then return true.
- Else return false.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
bool isequal(string str)
{
int n = str.length();
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 ;
}
return num == i + 1;
}
int main()
{
string str = "geeksforgeeks13" ;
isequal(str) ? cout << "Yes" : cout << "No" ;
return 0;
}
|
Java
import java.io.*;
class GFG {
static boolean isequal(String str)
{
int n = str.length();
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 ;
}
return num == i + 1 ;
}
static public void main(String[] args)
{
String str = "geeksforgeeks13" ;
if (isequal(str))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
def isequal( str ):
n = len ( str )
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
return num = = i + 1
if __name__ = = "__main__" :
str = "geeksforgeeks13"
print ( "Yes" ) if isequal( str ) else print ( "No" )
|
C#
using System;
class GFG {
static bool isequal( string str)
{
int n = str.Length;
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 ;
}
return num == i + 1;
}
static public void Main()
{
string str = "geeksforgeeks13" ;
if (isequal(str))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
Javascript
<script>
function isequal(str)
{
let n = str.length;
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 ;
}
return num == i + 1;
}
let str = "geeksforgeeks13" ;
if (isequal(str))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
PHP
<?php
function isequal( $str )
{
$n = strlen ( $str );
$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 ;
}
return $num == $i + 1;
}
$str = "geeksforgeeks13" ;
if (isequal( $str ))
echo "Yes" ;
else
echo "No" ;
return 0;
?>
|
Time complexity: O(n) where n is length of the string
Auxiliary space: O(1)
Approach#2: Using is.digit()
First, the length of the input string is calculated, and 1 is subtracted from it to exclude the last character, which is expected to be a number. Then, the isdigit() method is used to check if the last character of the string is a digit. If the last character is a digit, the code converts it into an integer and compares it with the length of the string. If they are equal, it means the length of the string is equal to the number appended at the end of the string.
Algorithm
1. Initialize a variable str with the input string.
2. Calculate the length of the string and store it in the variable length.
3. Subtract 1 from length to exclude the last character from the length calculation.
4. Check if the last character of the string is a digit using the isdigit() method.
5. If the last character is a digit, convert it into an integer using the int() function.
6. Compare the integer with length.
7. If they are equal, print “Yes”; otherwise, print “No”.
C++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "geeksforgeeks15" ;
int length = str.length() - 1;
if ( isdigit (str[length]) && stoi(str.substr(length)) == length) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
|
Java
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String str = "geeksforgeeks15" ;
int length = str.length() - 1 ;
if (Character.isDigit(str.charAt(length)) && Integer.parseInt(str.substring(length)) == length) {
System.out.println( "Yes" );
} else {
System.out.println( "No" );
}
}
}
|
Python3
str = "geeksforgeeks15"
length = len ( str ) - 1
if str [length:].isdigit() and int ( str [length:]) = = length:
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
namespace MainNamespace
{
class MainClass
{
public static void Main( string [] args)
{
string str = "geeksforgeeks15" ;
int length = str.Length - 1;
if ( char .IsDigit(str[length]) && int .Parse(str.Substring(length)) == length)
{
Console.WriteLine( "Yes" );
}
else
{
Console.WriteLine( "No" );
}
}
}
}
|
Javascript
function main() {
var str = "geeksforgeeks15" ;
var length = str.length - 1;
if (isDigit(str[length]) && parseInt(str.substr(length)) === length) {
console.log( "Yes" );
} else {
console.log( "No" );
}
}
function isDigit(char) {
return /\d/.test(char);
}
main();
|
Time Complexity: O(1), The algorithm has constant time complexity because it performs a fixed number of operations, regardless of the length of the input string.
Space Complexity: O(1), The algorithm uses a fixed amount of memory to store the input string, length, and a few variables, so the space complexity is constant.
Last Updated :
15 Oct, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...