📌  相关文章
📜  检查是否可以通过互换字符使数组的所有字符串相同

📅  最后修改于: 2021-04-22 00:57:05             🧑  作者: Mango

给定的阵列ARR大小为N的组成等于长度字符串的[]中,任务是检查是否能够使该阵列的所有字符串可以等于或不通过交换一个字符串中的任意的字符具有相同的字符串的任何字符或其他字符串。
注意:执行操作0次或多次。

例子:

方法:可以通过计算给定数组每个字符的频率并检查是否可以被N整除来解决该问题。请按照以下步骤解决问题:

  1. 初始化一个数组hash [256] = {0}来存储字符的频率。
  2. 遍历hash []数组,并检查所有字符的频率是否可被N整除。
  3. 如果所有字符的频率都可被N整除,则打印“是”
  4. 否则,打印No。

下面是上述方法的实现:

C++
// C++ Program to implement
// the above approach
#include 
using namespace std;
  
// Fuction to check if all strings
// are equal after swap operations
bool checkEqual(string arr[], int N)
{
    // Stores the frequency
    // of characters
    int hash[256] = { 0 };
  
    // Stores the length of string
    int M = arr[0].length();
  
    // Traverse the array
    for (int i = 0; i < N; i++) {
        // Traverse each string
        for (int j = 0; j < M; j++) {
            hash[arr[i][j]]++;
        }
    }
  
    // Check if frequency of character
    // is divisible by N
    for (int i = 0; i < 256; i++) {
        if (hash[i] % N != 0) {
            return false;
        }
    }
  
    return true;
}
  
// Driver Code
int main()
{
  
    string arr[] = { "fdd", "fhh" };
    int N = sizeof(arr) / sizeof(arr[0]);
  
    if (checkEqual(arr, N)) {
        cout << "Yes";
    }
    else {
        cout << "No";
    }
  
    return 0;
}


Java
// Java Program to implement
// the above approach
class GFG{
  
// Fuction to check if all Strings
// are equal after swap operations
static boolean checkEqual(String arr[], 
                          int N)
{
  // Stores the frequency
  // of characters
  int hash[] = new int[256];
  
  // Stores the length of String
  int M = arr[0].length();
  
  // Traverse the array
  for (int i = 0; i < N; i++) 
  {
    // Traverse each String
    for (int j = 0; j < M; j++) 
    {
      hash[arr[i].charAt(j)]++;
    }
  }
  
  // Check if frequency of character
  // is divisible by N
  for (int i = 0; i < 256; i++) 
  {
    if (hash[i] % N != 0) 
    {
      return false;
    }
  }
  
  return true;
}
  
// Driver Code
public static void main(String[] args)
{
  String arr[] = {"fdd", "fhh"};
  int N = arr.length;
  
  if (checkEqual(arr, N)) 
  {
    System.out.print("Yes");
  }
  else 
  {
    System.out.print("No");
  }
}
}
  
// This code is contributed by 29AjayKumar


Python3
# Python3 program to implement
# the above approach
  
# Fuction to check if all strings 
# are equal after swap operations
def checkEqual(arr, N):
  
    # Stores the frequency
    # of characters
    hash = [0] * 256
  
    # Stores the length of string
    M = len(arr[0])
  
    # Traverse the array
    for i in range(N):
          
        # Traverse each string
        for j in range(M):
            hash[ord(arr[i][j])] += 1
  
    # Check if frequency of character
    # is divisible by N
    for i in range(256):
        if(hash[i] % N != 0):
            return False
  
    return True
  
# Driver Code
arr = [ "fdd", "fhh" ]
N = len(arr)
  
# Function call
if(checkEqual(arr, N)):
    print("Yes")
else:
    print("No")
  
# This code is contributed by Shivam Singh


C#
// C# program to implement
// the above approach
using System;
  
class GFG{
  
// Fuction to check if all Strings
// are equal after swap operations
static bool checkEqual(String []arr, 
                       int N)
{
      
    // Stores the frequency
    // of characters
    int []hash = new int[256];
      
    // Stores the length of String
    int M = arr[0].Length;
      
    // Traverse the array
    for(int i = 0; i < N; i++) 
    {
          
        // Traverse each String
        for(int j = 0; j < M; j++) 
        {
            hash[arr[i][j]]++;
        }
    }
      
    // Check if frequency of character
    // is divisible by N
    for(int i = 0; i < 256; i++) 
    {
        if (hash[i] % N != 0) 
        {
            return false;
        }
    }
    return true;
}
  
// Driver Code
public static void Main(String[] args)
{
    String []arr = { "fdd", "fhh" };
    int N = arr.Length;
      
    if (checkEqual(arr, N)) 
    {
        Console.Write("Yes");
    }
    else
    {
        Console.Write("No");
    }
}
}
  
// This code is contributed by Amit Katiyar


输出:
Yes

时间复杂度: O(N)
辅助空间: O(1)