1585. Check If String Is Transformable With Substring Sort Operations
Hard
Given two strings s
and t
, you want to transform string s
into string t
using the following operation any number of times:
- Choose a non-empty substring in
s
and sort it in-place so the characters are in ascending order.
For example, applying the operation on the underlined substring in "14234"
results in "12344"
.
Return true
if it is possible to transform string s
into string t
. Otherwise, return false
.
A substring is a contiguous sequence of characters within a string.
Example 1:
Input: s = "84532", t = "34852" Output: true Explanation: You can transform s into t using the following sort operations: "84532" (from index 2 to 3) -> "84352" "84352" (from index 0 to 2) -> "34852"
Example 2:
Input: s = "34521", t = "23415" Output: true Explanation: You can transform s into t using the following sort operations: "34521" -> "23451" "23451" -> "23415"
Example 3:
Input: s = "12345", t = "12435" Output: false
Example 4:
Input: s = "1", t = "2" Output: false
Constraints:
s.length == t.length
1 <= s.length <= 105
s
andt
only contain digits from'0'
to'9'
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Solution { public boolean isTransformable(String s, String t) { Stack<Integer>[] index = new Stack[10]; for(int i=0; i<10; ++i) index[i] = new Stack<>(); for(int i=s.length()-1; i>=0; --i){ int d = s.charAt(i) - '0'; index[d].add(i); } for(char c : t.toCharArray()){ int d = c - '0'; //the char c in t does not exist in s if(index[d].isEmpty()) return false; for(int d0=0; d0<d; ++d0){ if(!index[d0].isEmpty() && index[d0].peek()<index[d].peek()) return false; } index[d].pop(); } return true; } } |
No comments:
Post a Comment