给定两个字符串S和T ,任务是计算字符串S中重叠的字符串T的数量。
注意:如果有一些不匹配的单词作为子序列与字符串T不匹配,则打印-1。
例子:
Input: S = “chirpchirp”, T = “chirp”
Output: 0
Explanation:
There are no overlapping strings of “chirp”.
Input: S = “chcirphirp”, T = “chirp”
Output: 2
There are two overlapping string of T:
First “chirp” can be chcirphirp.
Second “chirp” can be chcirphirp.
方法:想法是迭代字符串S并在出现字符串T的第一个字符时立即增加重叠计数。如果在任何时刻当前字符等于最后一个字符,则减少重叠计数。同时,如果最大重叠计数大于2,则更新最大重叠计数。最后,检查每个子序列与字符串T匹配,检查重叠计数是否等于零。如果是,则返回最大重叠计数。
下面是上述方法的实现:
C++
// C++ implementation to find the
// maximum number of occurrence of
// the overlapping count
#include
using namespace std;
// Function to find the maximum
// overlapping strings
int maxOverlap(string S, string T)
{
string str = T;
int count[T.length()] = { 0 };
int overlap = 0;
int max_overlap = 0;
for (int i = 0; i <= S.length(); i++) {
// Get the current character
int index = str.find(S[i]);
// Condition to check if the current
// character is the first character
// of the string T then increment the
// overlapping count
if (index == 0) {
overlap++;
if (overlap >= 2)
max_overlap = max(overlap, max_overlap);
count[index]++;
}
else {
// Condition to check
// previous character is also
// occurred
if (count[index - 1] <= 0)
return -1;
// Update count of previous
// and current character
count[index]++;
count[index - 1]--;
}
// Condition to check the current
// character is the last character
// of the string T
if (index == 4)
overlap--;
}
// Condition to check the every
// subsequence is a valid string T
if (overlap == 0)
return max_overlap;
else
return -1;
}
// Driver Code
int main()
{
string S = "chcirphirp";
string T = "chirp";
// Function Call
cout << maxOverlap(S, T);
return 0;
}
Java
// Java implementation to find the
// maximum number of occurrence of
// the overlapping count
import java.util.*;
class GFG{
// Function to find the maximum
// overlapping Strings
static int maxOverlap(String S, String T)
{
String str = T;
int count[] = new int[T.length()];
int overlap = 0;
int max_overlap = 0;
for(int i = 0; i < S.length(); i++)
{
// Get the current character
int index = str.indexOf(S.charAt(i));
// Condition to check if the current
// character is the first character
// of the String T then increment the
// overlapping count
if (index == 0)
{
overlap++;
if (overlap >= 2)
max_overlap = Math.max(overlap,
max_overlap);
count[index]++;
}
else
{
// Condition to check
// previous character is also
// occurred
if (count[index - 1] <= 0)
return -1;
// Update count of previous
// and current character
count[index]++;
count[index - 1]--;
}
// Condition to check the current
// character is the last character
// of the String T
if (index == 4)
overlap--;
}
// Condition to check the every
// subsequence is a valid String T
if (overlap == 0)
return max_overlap;
else
return -1;
}
// Driver code
public static void main(String[] args)
{
String S = "chcirphirp";
String T = "chirp";
// Function call
System.out.print(maxOverlap(S, T));
}
}
// This code is contributed by Princi Singh
Python3
# Python3 implementation to find the
# maximum number of occurrence of
# the overlapping count
# Function to find the maximum
# overlapping strings
def maxOverlap(S, T):
str = T
count = [0 for i in range(len(T))]
overlap = 0
max_overlap = 0
for i in range(0, len(S)):
# Get the current character
index = str.find(S[i])
# Condition to check if
# the current character is
# the first character of the
# string T then increment the
# overlapping count
if(index == 0):
overlap += 1
if(overlap >= 2):
max_overlap = max(overlap,
max_overlap)
count[index] += 1
else:
# Condition to check
# previous character is also
# occurred
if(count[index - 1] <= 0):
return -1
# Update count of previous
# and current character
count[index] += 1
count[index - 1] -= 1
# Condition to check the current
# character is the last character
# of the string T
if(index == 4):
overlap -= 1
# Condition to check the every
# subsequence is a valid string T
if(overlap == 0):
return max_overlap
else:
return -1
# Driver Code
S = "chcirphirp"
T = "chirp"
# Function Call
print(maxOverlap(S, T))
# This code is contributed by avanitrachhadiya2155
C#
// C# implementation to find the
// maximum number of occurrence of
// the overlapping count
using System;
class GFG{
// Function to find the maximum
// overlapping Strings
static int maxOverlap(String S, String T)
{
String str = T;
int []count = new int[T.Length];
int overlap = 0;
int max_overlap = 0;
for(int i = 0; i < S.Length; i++)
{
// Get the current character
int index = str.IndexOf(S[i]);
// Condition to check if the current
// character is the first character
// of the String T then increment the
// overlapping count
if (index == 0)
{
overlap++;
if (overlap >= 2)
{
max_overlap = Math.Max(overlap,
max_overlap);
}
count[index]++;
}
else
{
// Condition to check
// previous character is also
// occurred
if (count[index - 1] <= 0)
return -1;
// Update count of previous
// and current character
count[index]++;
count[index - 1]--;
}
// Condition to check the current
// character is the last character
// of the String T
if (index == 4)
overlap--;
}
// Condition to check the every
// subsequence is a valid String T
if (overlap == 0)
return max_overlap;
else
return -1;
}
// Driver code
public static void Main(String[] args)
{
String S = "chcirphirp";
String T = "chirp";
// Function call
Console.Write(maxOverlap(S, T));
}
}
// This code is contributed by sapnasingh4991
输出:
2