Check If a String Can Break Another String
MediumUpdated: Aug 2, 2025
Practice on:
Problem
Given two strings: s1 and s2 with the same size, check if some permutation of string s1 can break some permutation of string s2 or vice-versa. In other words s2 can break s1 or vice-versa.
A string x can break string y (both of size n) if x[i] >= y[i] (in alphabetical order) for all i between 0 and n-1.
Examples
Example 1:
Input: s1 = "abc", s2 = "xya"
Output: true
Explanation: "ayx" is a permutation of s2="xya" which can break to string "abc" which is a permutation of s1="abc".
Example 2:
Input: s1 = "abe", s2 = "acd"
Output: false
Explanation: All permutations for s1="abe" are: "abe", "aeb", "bae", "bea", "eab" and "eba" and all permutation for s2="acd" are: "acd", "adc", "cad", "cda", "dac" and "dca". However, there is not any permutation from s1 which can break some permutation from s2 and vice-versa.
Example 3:
Input: s1 = "leetcodee", s2 = "interview"
Output: true
Solution
Method 1 - Sorting
To determine if one permutation of s1 can break one permutation of s2 or vice versa, we need to sort both strings and compare them character by character. Here are the detailed steps:
- Sort the characters of both strings.
- Compare the sorted strings to check if one can break the other.
- To break
s2, every character in the sorteds1should be greater than or equal to the corresponding character in the sorteds2. - Similarly, check if
s2can breaks1.
Code
Java
public class Solution {
public boolean checkIfCanBreak(String s1, String s2) {
char[] arr1 = s1.toCharArray();
char[] arr2 = s2.toCharArray();
Arrays.sort(arr1);
Arrays.sort(arr2);
boolean canBreak1 = true;
boolean canBreak2 = true;
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] < arr2[i]) {
canBreak1 = false;
}
if (arr2[i] < arr1[i]) {
canBreak2 = false;
}
}
return canBreak1 || canBreak2;
}
}
Python
class Solution:
def checkIfCanBreak(self, s1: str, s2: str) -> bool:
arr1 = sorted(s1)
arr2 = sorted(s2)
can_break_1 = True
can_break_2 = True
for i in range(len(arr1)):
if arr1[i] < arr2[i]:
can_break_1 = False
if arr2[i] < arr1[i]:
can_break_2 = False
return can_break_1 or can_break_2
Complexity
- ⏰ Time complexity:
O(n log n)for sorting both strings. - 🧺 Space complexity:
O(n)for storing the sorted versions of the strings.