Redistribute Characters to Make All Strings Equal

You are given an array of strings words (0-indexed).

In one operation, pick two distinct indices i and j, where words[i] is a non-empty string, and move any character from words[i] to any position in words[j].

Return true if you can make every string in words equal using any number of operations, and false otherwise.

Example 1:

Input: words = ["abc","aabc","bc"]
Output: true
Explanation: Move the first 'a' in words[1] to the front of words[2],
to make words[1] = "abc" and words[2] = "abc".
All the strings are now equal to "abc", so return true.

Example 2:

Input: words = ["ab","a"]
Output: false
Explanation: It is impossible to make all the strings equal using the operation.

Approach

C++

#include <bits/stdc++.h>
using namespace std;

bool makeEqual(vector<string&words)
{
    int arr[26] = {0};

    for (int i = 0i < words.size(); i++)
    {
        for (int j = 0j < words[i].size(); j++)
        {

            arr[words[i][j] - 'a']++;
        }
    }

    for (int i = 0i < 26i++)
    {
        if (arr[i] % words.size() != 0)
            return false;
    }
    return true;
}

int main()
{
    vector<stringwords = {"abc""aabc""bc"};

    if (makeEqual(words))
        cout << "true\n";
    else
        cout << "false\n";

    return 0;
}


No comments:

Post a Comment