Check if a given mobile number is fancy
Given a mobile number and some conditions for a fancy number, find if the given number is fancy. A 10-digit mobile number is called fancy if it satisfies any of the following three conditions.
- A single number occurs three consecutive times. Like 777.
- Three consecutive digits are either in increasing or decreasing fashion. Like 456 or 987.
- A single digit occurs four or more times in the number. Like 9859009976 – here the digit 9 occurs 4 times.
Examples:
Input : 9859009976
Output : Yes
The given mobile number satisfies condition three given above.
Input : 7609438921
Output : No
None of the given three conditions satisfy.
Idea is to convert number into string using to_string so that it becomes easy to traverse. For condition three to count the frequency of every number a basic concept of string hashing is used.
Source :Oracle Interview Set
Below is the solution to the above problem:
C++
#include <bits/stdc++.h>
using namespace std;
bool cond1(string s)
{
for ( int i = 0; i < s.size() - 2; i++) {
if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
return true ;
}
return false ;
}
bool cond2(string s)
{
for ( int i = 0; i < s.size() - 2; i++) {
if ((s[i] < s[i + 1] && s[i + 1] < s[i + 2]) ||
(s[i] > s[i + 1] && s[i + 1] > s[i + 2]))
return true ;
}
return false ;
}
bool cond3(string s)
{
int a[10];
memset (a, 0, sizeof (a));
for ( int i = 0; i < s.size(); i++)
a[s[i] - '0' ]++;
for ( int i = 0; i < 10; i++)
if (a[i] >= 4)
return true ;
return false ;
}
bool isFancy(string s)
{
if (cond1(s) || cond2(s) || cond3(s))
return true ;
else
return false ;
}
int main()
{
long int n = 7609438921;
string s = to_string(n);
if (isFancy(s))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG {
public static void main(String[] args) {
String mobileNumber = "7654449244" ;
if (isFancy(mobileNumber))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
public static boolean isFancy(String mobileNumber) {
int incrementCount = 0 ;
int decrementCount = 0 ;
int consecutiveCount = 1 ;
int [] countArray = new int [ 10 ];
int prevDigit = - 1 ;
for ( int i = 0 ; i < mobileNumber.length(); i++) {
int digit = Integer.parseInt(String.valueOf(mobileNumber.charAt(i)));
countArray[digit] += 1 ;
if (countArray[digit] > 3 )
return true ;
if (prevDigit == digit)
consecutiveCount += 1 ;
else if (prevDigit == digit+ 1 && prevDigit != - 1 ) {
incrementCount += 1 ;
decrementCount = 0 ;
consecutiveCount = 1 ;
}
else if (digit == prevDigit+ 1 ) {
decrementCount += 1 ;
incrementCount = 0 ;
consecutiveCount = 1 ;
}
if (consecutiveCount == 3 )
return true ;
if (incrementCount == 2 || decrementCount == 2 )
return true ;
prevDigit = digit;
}
return false ;
}
}
|
Python 3
def cond1(s):
for i in range ( len (s) - 2 ):
if (s[i] = = s[i + 1 ] and
s[i + 1 ] = = s[i + 2 ]):
return True
return False
def cond2(s):
for i in range ( len (s) - 2 ):
if ((s[i] < s[i + 1 ] and
s[i + 1 ] < s[i + 2 ]) or
(s[i] > s[i + 1 ] and
s[i + 1 ] > s[i + 2 ])):
return True
return False
def cond3(s):
a = [ 0 ] * 10
for i in range ( len (s)):
a[s[i] - '0' ] = a[s[i] - '0' ] + 1
for i in range ( len ( 9 )):
if (a[i] > = 4 ):
return True
return False
def isFancy(s):
if (cond1(s) or cond2(s) or cond3(s)):
return True
else :
return False
s = "7609438921"
if (isFancy(s)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG
{
public static void Main(String[] args)
{
String mobileNumber = "7654449244" ;
if (isFancy(mobileNumber))
{
Console.WriteLine( "Yes" );
}
else
{
Console.WriteLine( "No" );
}
}
public static bool isFancy(String mobileNumber)
{
int incrementCount = 0;
int decrementCount = 0;
int consecutiveCount = 1;
int [] countArray = new int [10];
int prevDigit = -1;
for ( int i = 0; i < mobileNumber.Length; i++)
{
int digit = Int32.Parse(String.Join( "" ,mobileNumber[i]));
countArray[digit] += 1;
if (countArray[digit] > 3)
{
return true ;
}
if (prevDigit == digit)
{
consecutiveCount += 1;
}
else if (prevDigit == digit + 1 && prevDigit != -1)
{
incrementCount += 1;
decrementCount = 0;
consecutiveCount = 1;
}
else if (digit == prevDigit + 1)
{
decrementCount += 1;
incrementCount = 0;
consecutiveCount = 1;
}
if (consecutiveCount == 3)
{
return true ;
}
if (incrementCount == 2 || decrementCount == 2)
{
return true ;
}
prevDigit = digit;
}
return false ;
}
}
|
Javascript
<script>
function cond1( s)
{
for ( var i = 0; i < s.length - 2; i++) {
if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
return true ;
}
return false ;
}
function cond2( s)
{
for ( var i = 0; i < s.length - 2; i++) {
if ((s[i] < s[i + 1] && s[i + 1] < s[i + 2]) ||
(s[i] > s[i + 1] && s[i + 1] > s[i + 2]))
return true ;
}
return false ;
}
function cond3( s)
{
var a = new Array(10);
a.fill(0);
for ( var i = 0; i < s.length; i++)
a[s[i] - '0' ]++;
for ( var i = 0; i < 10; i++)
if (a[i] >= 4)
return true ;
return false ;
}
function isFancy( s)
{
if (cond1(s) || cond2(s) || cond3(s))
return true ;
else
return false ;
}
var n = "7609438921" ;
if (isFancy(n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time complexity: O(1) because input string size would be constant i.e., 10.
Auxiliary space: O(1) because it is using constant space.
Last Updated :
30 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...