Java Program to Check if a string is a valid shuffle of two distinct strings

In this example, we will check if a string is the valid shuffle of two other strings in Java.

Example: Check if a string is a valid shuffle of two other strings

import java.util.Arrays;

class Test {


  // length of result string should be equal to sum of two strings
  static boolean checkLength(String first, String second, String result) {
    if (first.length() + second.length() != result.length()) {
      return false;
    }
    else {
      return true;
    }
  }

  // this method converts the string to char array 
  // sorts the char array
  // convert the char array to string and return it
  static String sortString(String str) {
  
    char[] charArray = str.toCharArray();
    Arrays.sort(charArray);

    // convert char array back to string
    str = String.valueOf(charArray);

    return str;
  }

  // this method compares each character of the result with 
  // individual characters of the first and second string
  static boolean shuffleCheck(String first, String second, String result) {
    
    // sort each string to make comparison easier
    first = sortString(first);
    second = sortString(second);
    result = sortString(result);

    // variables to track each character of 3 strings
    int i = 0, j = 0, k = 0;

    // iterate through all characters of result
    while (k != result.length()) {

      // check if first character of result matches
      // with first character of first string
      if (i < first.length() && first.charAt(i) == result.charAt(k))
        i++;

      // check if first character of result matches
      // with the first character of second string
      else if (j < second.length() && second.charAt(j) == result.charAt(k))
        j++;

      // if the character doesn't match
      else {
        return false;
      }

      // access next character of result
      k++;
    }

    // after accessing all characters of result
    // if either first or second has some characters left
    if(i < first.length() || j < second.length()) {
      return false;
    }

    return true;
  }

  public static void main(String[] args) {

    String first = "XY";
    String second = "12";
    String[] results = {"1XY2", "Y1X2", "Y21XX"};

    // call the method to check if result string is
    // shuffle of the string first and second
    for (String result : results) {
      if (checkLength(first, second, result) == true && shuffleCheck(first, second, result) == true) {
        System.out.println(result + " is a valid shuffle of " + first + " and " + second);
      }
      else {
        System.out.println(result + " is not a valid shuffle of " + first + " and " + second);
      }
    }
  }
}

Output

1XY2 is a valid shuffle of XY and 12
Y1X2 is a valid shuffle of XY and 12     
Y21XX is not a valid shuffle of XY and 12

In the above example, we have a string array named results. It contains three strings: 1XY2Y1X2, and Y21XX. We are checking if these three strings are valid shuffle of strings first(XY) and second(12).

Here, we have used 3 methods:

1. checkLength() – The number of characters in a shuffled string should be equal to the sum of the character in two strings.

So, this method checks if the length of the shuffled string is same as the sum of the length of the first and second strings.

If the length is not equal, there is no need to call the shuffleCheck() method. Hence, we have used the if statement as

// inside main method
if (checkLength(first, second, result) == true && shuffleCheck(first, second, result) == true)

2. sortString() – This method converts the string to char Array and then uses the Arrays.sort() method to sort the array. Finally, returns the sorted string.

Since we are comparing the shuffled string with the other two strings, sorting all three strings will make the comparison more efficient.

3. shuffleCheck() – This method compares the individual characters of the shuffled string with the characters of first and second strings

Leave a Reply