给定一个由小写英文字母组成的字符串S ,任务是检查是否存在字符串S的排列,使得它不包含任何单调的子串。
A monotonous substring has the following properties:
- Length os such substring is 2.
- Both the characters are consecutive, For example – “ab”, “cd”, “dc”, “zy” etc.
例子:
Input: S = “abcd”
Output: Yes
Explanation:
String S can be rearranged into “cadb” or “bdac”
Input: string = “aab”
Output: No
Explanation:
Every arrangement of the string contains a monotonous substring.
方法:我们的想法是群的字符分成两个不同的桶,其中一个桶包含其在偶数地方,另一桶包含这是在奇数地方字符的字符。最后,检查两个组的连接点是否是单调子串。
下面是上述方法的实现:
C++
// C++ implementation such that there
// are no monotonous
// string in given string
#include
using namespace std;
// Function to check a string doesn't
// contains a monotonous substring
bool check(string s)
{
bool ok = true;
// Loop to iterate over the string
// and check that it doesn't contains
// the monotonous substring
for (int i = 0; i + 1 < s.size(); ++i)
ok &= (abs(s[i] - s[i + 1]) != 1);
return ok;
}
// Function to check that there exist
// a arrangement of string such that
// it doesn't contains monotonous substring
string monotonousString(string s)
{
string odd = "", even = "";
// Loop to group the characters
// of the string into two buckets
for (int i = 0; i < s.size(); ++i) {
if (s[i] % 2 == 0)
odd += s[i];
else
even += s[i];
}
// Sorting the two buckets
sort(odd.begin(), odd.end());
sort(even.begin(), even.end());
// Condition to check if the
// concatenation point doesn't
// contains the monotonous string
if (check(odd + even))
return "Yes";
else if (check(even + odd))
return "Yes";
return "No";
}
// Driver Code
int main()
{
string str = "abcd";
string ans;
ans = monotonousString(str);
cout << ans << endl;
return 0;
}
Java
// Java implementation such that there
// are no monotonous
// string in given string
import java.io.*;
import java.util.*;
class GFG{
// Function to check a string doesn't
// contains a monotonous substring
static boolean check(String s)
{
boolean ok = true;
// Loop to iterate over the string
// and check that it doesn't contains
// the monotonous substring
for (int i = 0; i + 1 < s.length(); ++i)
ok &= (Math.abs(s.charAt(i) -
s.charAt(i + 1)) != 1);
return ok;
}
// Function to check that there exist
// a arrangement of string such that
// it doesn't contains monotonous substring
static String monotonousString(String s)
{
String odd = "", even = "";
// Loop to group the characters
// of the string into two buckets
for (int i = 0; i < s.length(); ++i)
{
if (s.charAt(i) % 2 == 0)
odd += s.charAt(i);
else
even += s.charAt(i);
}
// Sorting the two buckets
char oddArray[] = odd.toCharArray();
Arrays.sort(oddArray);
odd = new String(oddArray);
char evenArray[] = even.toCharArray();
Arrays.sort(evenArray);
even = new String(evenArray);
// Condition to check if the
// concatenation point doesn't
// contains the monotonous string
if (check(odd + even))
return "Yes";
else if (check(even + odd))
return "Yes";
return "No";
}
// Driver Code
public static void main(String []args)
{
String str = "abcd";
String ans;
ans = monotonousString(str);
System.out.println( ans);
}
}
// This code is contributed by ChitraNayal
Python3
# Python3 implementation such that there
# are no monotonous string in given string
# Function to check a string doesn't
# contains a monotonous substring
def check(s):
ok = True
# Loop to iterate over the string
# and check that it doesn't contains
# the monotonous substring
for i in range(0, len(s) - 1, 1):
ok = (ok & (abs(ord(s[i]) -
ord(s[i + 1])) != 1))
return ok
# Function to check that there exist
# a arrangement of string such that
# it doesn't contains monotonous substring
def monotonousString(s):
odd = ""
even = ""
# Loop to group the characters
# of the string into two buckets
for i in range(len(s)):
if (ord(s[i]) % 2 == 0):
odd += s[i]
else:
even += s[i]
# Sorting the two buckets
odd = list(odd)
odd.sort(reverse = False)
odd = str(odd)
even = list(even)
even.sort(reverse = False)
even = str(even)
# Condition to check if the
# concatenation point doesn't
# contains the monotonous string
if (check(odd + even)):
return "Yes"
elif (check(even + odd)):
return "Yes"
return "No"
# Driver Code
if __name__ == '__main__':
str1 = "abcd"
ans = monotonousString(str1)
print(ans)
# This code is contributed by Samarth
C#
// C# implementation such that there
// are no monotonous
// string in given string
using System;
class GFG{
// Function to check a string doesn't
// contains a monotonous substring
static bool check(string s)
{
bool ok = true;
// Loop to iterate over the string
// and check that it doesn't contains
// the monotonous substring
for(int i = 0; i + 1 < s.Length; ++i)
ok &= (Math.Abs(s[i] -
s[i + 1]) != 1);
return ok;
}
// Function to check that there exist
// a arrangement of string such that
// it doesn't contains monotonous substring
static string monotonousString(string s)
{
string odd = "", even = "";
// Loop to group the characters
// of the string into two buckets
for(int i = 0; i < s.Length; ++i)
{
if (s[i] % 2 == 0)
odd += s[i];
else
even += s[i];
}
// Sorting the two buckets
char []oddArray = odd.ToCharArray();
Array.Sort(oddArray);
odd = new String(oddArray);
char []evenArray = even.ToCharArray();
Array.Sort(evenArray);
even = new String(evenArray);
// Condition to check if the
// concatenation point doesn't
// contains the monotonous string
if (check(odd + even))
return "Yes";
else if (check(even + odd))
return "Yes";
return "No";
}
// Driver Code
public static void Main(string []args)
{
string str = "abcd";
string ans;
ans = monotonousString(str);
Console.Write(ans);
}
}
// This code is contributed by rutvik_56
Javascript
输出:
Yes
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live