📌  相关文章
📜  检查是否存在不包含任何单调子串的给定字符串的排列

📅  最后修改于: 2021-09-04 09:39:04             🧑  作者: Mango

给定一个由小写英文字母组成的字符串S ,任务是检查是否存在字符串S的排列,使得它不包含任何单调的子串。

例子:

方法:我们的想法是群的字符分成两个不同的桶,其中一个桶包含其在偶数地方,另一桶包含这是在奇数地方字符的字符。最后,检查两个组的连接点是否是单调子串。

下面是上述方法的实现:

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