给定一个手机号码和一些关于“靓号”的条件,我们需要判断该号码是否符合要求。如果一个10位数的手机号码满足以下三个条件中的任意一个,我们就称它为“靓号”
- 单个数字连续出现三次。 例如
777。 - 三个连续数字呈递增或递减趋势。 例如 INLINECODE8899dda6 或 INLINECODEe961a482。
- 某个数字在号码中出现了四次或四次以上。 例如 INLINECODE492b9be8 —— 这里的数字 INLINECODE21246fe4 出现了 4 次。
示例:
> 输入: 9859009976
> 输出: Yes
> 该手机号码满足了上面提到的第三个条件。
>
>
>
>
>
> 输入: 7609438921
> 输出: No
> 给定的三个条件均不满足。
解决思路
我们的想法是利用 <a href="https://www.geeksforgeeks.org/cpp/stdtostring-in-cpp/">INLINECODE8987b05e 将数字转换为字符串,这样遍历起来会更容易。为了满足第三个条件(统计每个数字的出现频率),我们使用了基本的字符串哈希概念。
下面是针对该问题的解决方案:
C++
// C++ program to check if a given mobile
// number is fancy or not.
#include
using namespace std;
// Returns true if s has three consecutive
// same digits.
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;
}
// Returns true if s has three increasing or
// decreasing digits.
bool cond2(string s)
{
for (int i = 0; i < s.size() - 2; i++) {
if ((s[i] < s[i + 1] && s[i + 1] s[i + 1] && s[i + 1] > s[i + 2]))
return true;
}
return false;
}
// Checks if a single digit occurs 4 times.
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 = 4)
return true;
return false;
}
bool isFancy(string s)
{
if (cond1(s) || cond2(s) || cond3(s))
return true;
else
return false;
}
// Driver condition
int main()
{
long int n = 7609438921;
string s = to_string(n);
if (isFancy(s))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to check if a given mobile
// number is fancy or not.
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 3)
return true;
// Checking for consecutive digits are same
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;
}
}
// This code is contributed by Vasishta Balla
Python 3
# Python3 program to check if a
# given mobile number is fancy or not.
# Returns true if s has three
# consecutive same digits.
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
# Returns true if s has three
# increasing or decreasing digits.
def cond2(s):
for i in range(len(s) - 2):
if ((s[i] < s[i + 1] and
s[i + 1] s[i + 1] and
s[i + 1] > s[i + 2])):
return True
return False
# Checks if a single digit
# occurs 4 times.
def cond3(s):
a = [0] * 10
for i in range(len(s)):
a[ord(s[i]) - ord(‘0‘)] = a[ord(s[i]) - ord(‘0‘)] + 1
for i in range(10):
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
# Driver Code
if __name__ == "__main__":
n = 7609438921
s = str(n)
if (isFancy(s)):
print("Yes")
else:
print("No")
C#
// C# program to check if a given mobile
// number is fancy or not.
using System;
using System.Collections.Generic;
class GFG {
// Returns true if s has three consecutive
// same digits.
static bool cond1(string s)
{
for (int i = 0; i < s.Length - 2; i++) {
if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
return true;
}
return false;
}
// Returns true if s has three increasing or
// decreasing digits.
static bool cond2(string s)
{
for (int i = 0; i < s.Length - 2; i++) {
if ((s[i] < s[i + 1] && s[i + 1] s[i + 1] && s[i + 1] > s[i + 2]))
return true;
}
return false;
}
// Checks if a single digit occurs 4 times.
static bool cond3(string s)
{
int []a = new int[10];
for (int i = 0; i < s.Length; i++)
a[s[i] - '0']++;
for (int i = 0; i = 4)
return true;
return false;
}
static bool isFancy(string s)
{
if (cond1(s) || cond2(s) || cond3(s))
return true;
else
return false;
}
// Driver condition
public static void Main()
{
long n = 7609438921;
string s = n.ToString();
if (isFancy(s))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by PrinciRaj1992
Javascript
// Javascript program to check if a given mobile
// number is fancy or not.
// Returns true if s has three consecutive
// same digits.
function cond1(s)
{
for (let i = 0; i < s.length - 2; i++) {
if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
return true;
}
return false;
}
// Returns true if s has three increasing or
// decreasing digits.
function cond2(s)
{
for (let i = 0; i < s.length - 2; i++) {
if ((s[i] < s[i + 1] && s[i + 1] s[i + 1] && s[i + 1] > s[i + 2]))
return true;
}
return false;
}
// Checks if a single digit occurs 4 times.
function cond3(s)
{
let a = new Array(10).fill(0);
for (let i = 0; i < s.length; i++)
a[s[i] - '0']++;
for (let i = 0; i = 4)
return true;
return false;
}
function isFancy(s)
{
if (cond1(s) || cond2(s) || cond3(s))
return true;
else
return false;
}
// Driver condition
let n = 7609438921;
let s = n.toString();
if (isFancy(s))
document.write("Yes");
else
document.write("No");