给定一个由 ‘.’ 组成的字符串或任何数字。一种 ‘。’在字符串表示单元格为空,如果有数字在任何单元格中,这意味着可以移动在字符串向右或向左步进。
任务是检查字符串的任何单元格是否可以多次访问。如果是,则打印 YES 否则打印 NO。
例子:
Input : str = ".2...2.."
Output: YES
The fourth cell can be visited twice. One way to reach
the fourth cell is from 2nd cell by moving 2 steps to right
and another way to reach fourth cell is by moving 2 steps
left from cell 6.
Input : str = ".2...1"
Output: NO
None of the cells in the given string
can be visited more than once.
这个想法是采用一个数组visited[]来跟踪可以访问字符串的第i个单元格的次数。现在遍历字符串并检查当前字符是否为 ‘.’或一个数字 .如果当前字符是 ‘.’如果它是一个数字,则不执行任何其他操作,然后将 [ix, i+x] 范围内的访问数组中的访问次数增加 1。
最后,遍历visited[] 数组并检查是否有任何单元格被多次访问。
下面是上述方法的实现:
C++
// C++ program to check if any cell of the
// string can be visited more than once
#include
using namespace std;
// Function to check if any cell can be
// visited more than once
bool checkIfOverlap(string str)
{
int len = str.length();
// Array to mark cells
int visited[len + 1] = { 0 };
// Traverse the string
for (int i = 0; i < len; i++) {
if (str[i] == '.')
continue;
// Increase the visit count of the left and right
// cells within the array which can be visited
for (int j = max(0, i - str[i]); j <= min(len, i + str[i]); j++)
visited[j]++;
}
for (int i = 0; i < len; i++) {
// If any cell can be visited more than once
// Return True
if (visited[i] > 1) {
return true;
}
}
return false;
}
// Driver code
int main()
{
string str = ".2..2.";
if (checkIfOverlap(str))
cout << "YES";
else
cout << "NO";
return 0;
}
Java
// Java program to check if any cell of the
// string can be visited more than once
import java.io.*;
class GFG {
// Function to check if any cell can be
// visited more than once
static boolean checkIfOverlap(String str)
{
int len = str.length();
// Array to mark cells
int []visited = new int[len +1];
// Traverse the string
for (int i = 0; i < len; i++) {
if (str.charAt(i)== '.')
continue;
// Increase the visit count of the left and right
// cells within the array which can be visited
for (int j = Math.max(0, i - str.charAt(i)); j <= Math.min(len, i + str.charAt(i)); j++)
visited[j]++;
}
for (int i = 0; i < len; i++) {
// If any cell can be visited more than once
// Return True
if (visited[i] > 1) {
return true;
}
}
return false;
}
// Driver code
public static void main (String[] args) {
String str = ".2..2.";
if (checkIfOverlap(str))
System.out.println("YES");
else
System.out.print("NO");
}
}
// This code is contributed by inder_verma..
Python 3
# Python3 program to check if
# any cell of the string can
# be visited more than once
# Function to check if any cell
# can be visited more than once
def checkIfOverlap(str) :
length = len(str)
# Array to mark cells
visited = [0] * (length + 1)
# Traverse the string
for i in range(length) :
if str[i] == "." :
continue
# Increase the visit count
# of the left and right cells
# within the array which can
# be visited
for j in range(max(0, i - ord(str[i]),
min(length, i +
ord(str[i])) + 1)) :
visited[j] += 1
# If any cell can be visited
# more than once, Return True
for i in range(length) :
if visited[i] > 1 :
return True
return False
# Driver code
if __name__ == "__main__" :
str = ".2..2."
if checkIfOverlap(str) :
print("YES")
else :
print("NO")
# This code is contributed
# by ANKITRAI1
C#
// C# program to check if any
// cell of the string can be
// visited more than once
using System;
class GFG
{
// Function to check if any cell
// can be visited more than once
static bool checkIfOverlap(String str)
{
int len = str.Length;
// Array to mark cells
int[] visited = new int[len + 1];
// Traverse the string
for (int i = 0; i < len; i++)
{
if (str[i]== '.')
continue;
// Increase the visit count of
// the left and right cells
// within the array which can be visited
for (int j = Math.Max(0, i - str[i]);
j <= Math.Min(len, i + str[i]); j++)
visited[j]++;
}
for (int i = 0; i < len; i++)
{
// If any cell can be visited
// more than once, Return True
if (visited[i] > 1)
{
return true;
}
}
return false;
}
// Driver code
public static void Main ()
{
String str = ".2..2.";
if (checkIfOverlap(str))
Console.Write("YES");
else
Console.Write("NO");
}
}
// This code is contributed
// by Akanksha Rai(Abby_akku)
PHP
1)
{
return true;
}
}
return false;
}
// Driver code
$str = ".2..2.";
if (checkIfOverlap($str))
echo "YES";
else
echo "NO";
// This code is contributed
// by ChitraNayal
?>
Javascript
输出:
YES