<p>Given two strings <code>s</code> and <code>t</code>, transform string <code>s</code> into string <code>t</code> using the following operation any number of times:</p>

<ul>
	<li>Choose a <strong>non-empty</strong> substring in <code>s</code> and sort it in place so the characters are in <strong>ascending order</strong>.

	<ul>
		<li>For example, applying the operation on the underlined substring in <code>&quot;1<u>4234</u>&quot;</code> results in <code>&quot;1<u>2344</u>&quot;</code>.</li>
	</ul>
	</li>
</ul>

<p>Return <code>true</code> if <em>it is possible to transform <code>s</code> into <code>t</code></em>. Otherwise, return <code>false</code>.</p>

<p>A <strong>substring</strong> is a contiguous sequence of characters within a string.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;84532&quot;, t = &quot;34852&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> You can transform s into t using the following sort operations:
&quot;84<u>53</u>2&quot; (from index 2 to 3) -&gt; &quot;84<u>35</u>2&quot;
&quot;<u>843</u>52&quot; (from index 0 to 2) -&gt; &quot;<u>348</u>52&quot;
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;34521&quot;, t = &quot;23415&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> You can transform s into t using the following sort operations:
&quot;<u>3452</u>1&quot; -&gt; &quot;<u>2345</u>1&quot;
&quot;234<u>51</u>&quot; -&gt; &quot;234<u>15</u>&quot;
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;12345&quot;, t = &quot;12435&quot;
<strong>Output:</strong> false
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>s.length == t.length</code></li>
	<li><code>1 &lt;= s.length &lt;= 10<sup>5</sup></code></li>
	<li><code>s</code> and <code>t</code> consist of only digits.</li>
</ul>

from collections import defaultdict
class Solution:
    def isTransformable(self, s: str, t: str) -> bool:
        #here love is the array that holds ranges of digits from 0 to 9 (len(love)==10)
        #here see is the array that holds indexes of all the digits in t (len(see)==10)

        total = [0]*10
        #Total array is the frequency of each digit from 0 to 9 in suffix i.e after index i
        temp = [0]*10
        #Temp array is the frequency of each digit from 0 to 9 is prefix i.e before i
        for i in s:
            total[int(i)]+=1
        love = [[] for i in range(10)]
        ##Love is range 
        for i in s:
            ko = int(i)
            lo = sum(temp[:ko+1]) ##Getting lower_value
            temp[ko] += 1 #Updating temp
            total[ko] -= 1 #Updating total
            up = sum(total[ko:])
            up = len(s)-up-1 #getting upper_index
            love[ko].append([lo,up])
        for i in range(len(love)):
            love[i].sort() ##Sorting ranges
        see = [[] for i in range(10)]
        for i in range(len(t)):
            ii = int(t[i])
            see[ii].append(i)
        # for i in range(10):see[i].sort() #No need to sort indexes they are already sorted
        def checkNum(num): #Function that checkes whether indexes are attainable or not for a digit num
            if len(see[num])!=len(love[num]):return False
            for i in range(len(see[num])):
                if see[num][i] not in range(love[num][i][0],love[num][i][1]+1):return False
            return True
        for i in range(10):
            if not checkNum(i):return False
        return True
36400