检查字符串是否遵循模式定义的字符顺序 |设置 1
给定一个输入字符串和一个模式,检查输入字符中的字符串是否遵循与模式中存在的字符相同的顺序。假设模式中不会有任何重复的字符。
例子:
Input:
string = "engineers rock"
pattern = "er";
Output: true
Explanation:
All 'e' in the input string are before all 'r'.
Input:
string = "engineers rock"
pattern = "egr";
Output: false
Explanation:
There are two 'e' after 'g' in the input string.
Input:
string = "engineers rock"
pattern = "gsr";
Output: false
Explanation:
There are one 'r' before 's' in the input string.
这个想法很简单。对于模式字符串中的每一对 (x, y) 连续字符,我们在输入字符串中找到 x 的最后一次出现和 y 的第一次出现。如果字符x 的最后一次出现是在任何对的字符y 的第一次出现之后,我们返回 false。检查模式字符串中的每一对连续字符就足够了。例如,如果我们考虑模式中的三个连续字符x、y 和 z,如果 (x, y) 和 (y, z) 返回 true,则意味着 (x, z) 也为 true。
下面是上述想法的实现——
C++
// C++ program check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
#include
using namespace std;
// Function to check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
bool checkPattern(string str, string pattern)
{
// len stores length of the given pattern
int len = pattern.length();
// if length of pattern is more than length of
// input string, return false;
if (str.length() < len)
return false;
for (int i = 0; i < len - 1; i++)
{
// x, y are two adjacent characters in pattern
char x = pattern[i];
char y = pattern[i + 1];
// find index of last occurrence of character x
// in the input string
size_t last = str.find_last_of(x);
// find index of first occurrence of character y
// in the input string
size_t first = str.find_first_of(y);
// return false if x or y are not present in the
// input string OR last occurrence of x is after
// the first occurrence of y in the input string
if (last == string::npos || first ==
string::npos || last > first)
return false;
}
// return true if string matches the pattern
return true;
}
// Driver code
int main()
{
string str = "engineers rock";
string pattern = "gsr";
cout << boolalpha << checkPattern(str, pattern);
return 0;
}
Java
// Java program check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
class GFG
{
// Function to check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
static boolean checkPattern(String str, String pattern)
{
// len stores length of the given pattern
int len = pattern.length();
// if length of pattern is more than length of
// input string, return false;
if (str.length() < len)
{
return false;
}
for (int i = 0; i < len - 1; i++)
{
// x, y are two adjacent characters in pattern
char x = pattern.charAt(i);
char y = pattern.charAt(i + 1);
// find index of last occurrence of character x
// in the input string
int last = str.lastIndexOf(x);
// find index of first occurrence of character y
// in the input string
int first = str.indexOf(y);
// return false if x or y are not present in the
// input string OR last occurrence of x is after
// the first occurrence of y in the input string
if (last == -1 || first
== -1 || last > first)
{
return false;
}
}
// return true if string matches the pattern
return true;
}
// Driver code
public static void main(String[] args)
{
String str = "engineers rock";
String pattern = "gsr";
System.out.println(checkPattern(str, pattern));
}
}
// This code contributed by Rajput-Ji
Python3
# Python3 program check if characters in
# the input string follows the same order
# as determined by characters present in
# the given pattern
# Function to check if characters in the
# input string follows the same order as
# determined by characters present
# in the given pattern
def checkPattern(string, pattern):
# len stores length of the given pattern
l = len(pattern)
# if length of pattern is more than length
# of input string, return false;
if len(string) < l:
return False
for i in range(l - 1):
# x, y are two adjacent characters in pattern
x = pattern[i]
y = pattern[i + 1]
# find index of last occurrence of
# character x in the input string
last = string.rindex(x)
# find index of first occurrence of
# character y in the input string
first = string.index(y)
# return false if x or y are not present
# in the input string OR last occurrence of
# x is after the first occurrence of y
# in the input string
if last == -1 or first == -1 or last > first:
return False
# return true if
# string matches the pattern
return True
# Driver Code
if __name__ == "__main__":
string = "engineers rock"
pattern = "gsr"
print(checkPattern(string, pattern))
# This code is contributed by
# sanjeev2552
C#
// C# program check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
using System;
class GFG
{
// Function to check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
static Boolean checkPattern(String str, String pattern)
{
// len stores length of the given pattern
int len = pattern.Length;
// if length of pattern is more than length of
// input string, return false;
if (str.Length < len)
{
return false;
}
for (int i = 0; i < len - 1; i++)
{
// x, y are two adjacent characters in pattern
char x = pattern[i];
char y = pattern[i+1];
// find index of last occurrence of character x
// in the input string
int last = str.LastIndexOf(x);
// find index of first occurrence of character y
// in the input string
int first = str.IndexOf(y);
// return false if x or y are not present in the
// input string OR last occurrence of x is after
// the first occurrence of y in the input string
if (last == -1 || first
== -1 || last > first)
{
return false;
}
}
// return true if string matches the pattern
return true;
}
// Driver code
public static void Main(String[] args)
{
String str = "engineers rock";
String pattern = "gsr";
Console.WriteLine(checkPattern(str, pattern));
}
}
/* This code contributed by PrinciRaj1992 */
Javascript
输出:
false