Decode String - Leetcode 394 - Python

  Рет қаралды 78,710

NeetCode

NeetCode

Күн бұрын

🚀 neetcode.io/ - A better way to prepare for Coding Interviews
🐦 Twitter: / neetcode1
🥷 Discord: / discord
🐮 Support the channel: / neetcode
⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
💡 CODING SOLUTIONS: • Coding Interview Solut...
💡 DYNAMIC PROGRAMMING PLAYLIST: • House Robber - Leetco...
🌲 TREE PLAYLIST: • Invert Binary Tree - D...
💡 GRAPH PLAYLIST: • Course Schedule - Grap...
💡 BACKTRACKING PLAYLIST: • Word Search - Backtrac...
💡 LINKED LIST PLAYLIST: • Reverse Linked List - ...
💡 BINARY SEARCH PLAYLIST: • Binary Search
Problem Link: leetcode.com/problems/decode-...
0:00 - Read the problem
3:45 - Drawing Explanation
12:07 - Coding Explanation
leetcode 394
This question was identified as an interview question from here: github.com/xizhengszhang/Leet...
#decode #string #python
Disclosure: Some of the links above may be affiliate links, from which I may earn a small commission.

Пікірлер: 101
@TheElementFive
@TheElementFive 2 жыл бұрын
Very comprehensive problem to practice stacks! Together with asteroid collision and daily temps, one can argue understanding those 3 problems alone are a solid prep for stack problems on interviews.
@Iamnoone56
@Iamnoone56 2 жыл бұрын
this was asked in my amazon sde 1 interview somehow i managed t solved it. holy cow!
@xinli7477
@xinli7477 2 жыл бұрын
Wow, they ask such difficult questions for sde 1? Congrats on solving it!
@PP-pe3fs
@PP-pe3fs Жыл бұрын
You have my respect
@ShivangiSingh-wc3gk
@ShivangiSingh-wc3gk 2 жыл бұрын
Did this myself and came to see the solution. I am so happy to see my progress. Thank you soooo much!!!
@harishsn4866
@harishsn4866 2 жыл бұрын
I know you probably hear this a lot but your explanations are so clear and easy to grasp. Thanks a ton for this.
@CostaKazistov
@CostaKazistov 2 жыл бұрын
It's no wonder Google hired him in a heartbeat. NeetCode has a great talent for reducing complex problems into simplest and digestible way.
@deathbombs
@deathbombs Жыл бұрын
Great explanation and diagrams!! This is what I got: The things to decode have this pattern: Coefficient(content) 2 things needed:coefficient, and content My approach using stack was adding just the {}, and tracking the indexes for substring , but I like your approach is cleaner by adding everything to stack. General approach: for all chars in string if stack is Empty: if isDigit: calculate the numerical part/coefficient, if (, add to stack, save startindex if is character, add to string builder if stack is not empty: add everything if is ), remove from stack if stack is empty, recursively call helper(s.substring(startIndex+1, endIndex)
@shubhamshrivastava8649
@shubhamshrivastava8649 2 жыл бұрын
Amazingly explained, was able to implement without even looking at code. Thank you!
@susmi51910
@susmi51910 2 жыл бұрын
You explain these problems so well! can you please do a video on the problem " Guess the word" ?
@jinny5025
@jinny5025 2 жыл бұрын
Best explanation as always!
@amogchandrashekar8159
@amogchandrashekar8159 2 жыл бұрын
You make things feel so easy! Thank you so much 😀
@varunshrivastava2706
@varunshrivastava2706 2 жыл бұрын
Then maybe its just me who still didn't understood it.
@victoronofiok520
@victoronofiok520 2 жыл бұрын
@@varunshrivastava2706 I would ask that you watch it again if so and jott what you can as you follow along Bless🙏
@arghya_0802
@arghya_0802 Жыл бұрын
One of the best solution availabe on YT. Great work sir. Huge fan of the way you break tough and/or complex problems into simpler versions!!😍😍
@begenchorazgeldiyev5298
@begenchorazgeldiyev5298 2 жыл бұрын
I don't know why I am still using java. I came up with the same solution with a stack but it is at least twice longer thanks to java. This is so easy to read and comprehend.
@utsavshrestha7162
@utsavshrestha7162 2 жыл бұрын
Lol same bro. Python is the best language for interviews in my opinion.
@AnupBhatt
@AnupBhatt 2 жыл бұрын
First coding channel on KZbin that I put the bell icon to receive all updates for !!
@CostaKazistov
@CostaKazistov 2 жыл бұрын
Same
@chenhaibin2010
@chenhaibin2010 2 жыл бұрын
Great clear explanation as always. thanks
@Gnaneshh
@Gnaneshh 2 жыл бұрын
Terrific explanation!!
@kashishshukla23
@kashishshukla23 2 жыл бұрын
Best explanation man! TYSM for your efforts.
@cherylto5898
@cherylto5898 7 ай бұрын
Love your videos, the clearest explainations I've come across among all the other ones ... Keep it up!
@LeetCodeSimplified
@LeetCodeSimplified Жыл бұрын
According to LeetCode premium, the time complexity of this solution is actually O(maxK^countK * n), where maxK is the maximum value of k, countK is the count of nested k values and n is the maximum length of the encoded string. Example, for s = 20[a10[bc]], maxK is 20, countK is 2 as there are 2 nested k values (20 and 10). Also, there are 2 encoded strings a and bc with the maximum length of the encoded string n as 2.
@wangyex
@wangyex Жыл бұрын
This is actually the best tutorial I found on the internet
@brandenimmerzeel8182
@brandenimmerzeel8182 14 күн бұрын
Thanks, i ended up solving this with recursion on my first attempt. I used this video to learn how to apply stacks to the problem. Thank you.
@october3518
@october3518 Жыл бұрын
wow usually I feel a bit anxious when not able to come up with a soln, I have been watching ur few vids! explanations r crisp and easy to understand, I even like it's in python while I code in cpp lol
@ren-hauchuang2005
@ren-hauchuang2005 2 жыл бұрын
This is the way better solution than official ones
@arun-ph9cn
@arun-ph9cn Жыл бұрын
WOW. the solution and explanation is simply superb!!
@atulkumar-bb7vi
@atulkumar-bb7vi Жыл бұрын
Explanation put very simple way, thanks for this!
@kylefan8478
@kylefan8478 2 жыл бұрын
this is a very good explanation, very concise and clear code. I implemented this in C++ and got 100% time and 96% memory.
@watchlistsclips3196
@watchlistsclips3196 2 жыл бұрын
please send me cpp code i am getting wrong answer in one test case
@watchlistsclips3196
@watchlistsclips3196 2 жыл бұрын
This is my code: class Solution { public: string stuff(int n,string s) { string t; while(n--) t+=s; return t; } int stringToNum(string s) { int num=0; for(int i=0;i
@samridhshubham8109
@samridhshubham8109 9 ай бұрын
A very excellent problem and explanation!
@pif5023
@pif5023 3 ай бұрын
Great video! Thanks! This problem showed me stacks are amazing for accruing and backtracking in an organic way!
@rajdeepchakraborty7961
@rajdeepchakraborty7961 2 жыл бұрын
Well explained.
@saifmohamed1776
@saifmohamed1776 2 жыл бұрын
i think if we consider the length of the output string is K then the time complx will be linear in this length K -> O(k) ;
@carloscarrillo201
@carloscarrillo201 2 жыл бұрын
You are coding god, man. You're in my idol list, right next Van Halen!
@dipeshprajapat1203
@dipeshprajapat1203 10 ай бұрын
Your way of explanation awsome
@ashutosh1541
@ashutosh1541 2 жыл бұрын
Man this is so easy in python .. i was doing it in C++ . i had the same logic but implementation was so tough for it
@satya00155
@satya00155 7 ай бұрын
much easier to understand than upvoted solutions which I could never do interview.
@matthewb2133
@matthewb2133 Жыл бұрын
great video, thanks
@abhitripathi
@abhitripathi Жыл бұрын
You are amazing, Thanks a lot Lots of love
@ekanshsharma1309
@ekanshsharma1309 Жыл бұрын
thank you so much sir for this amazing explaination🙇‍♂❤
@ryanc1663
@ryanc1663 2 жыл бұрын
Thanks bro u the man
@boybi612
@boybi612 2 жыл бұрын
very neat code
@nagendrabommireddi8437
@nagendrabommireddi8437 Жыл бұрын
thank you sir
@kakdi77
@kakdi77 2 жыл бұрын
Thanks for the video. Can you also do the Encode verion of this the (Leetcode 471) ?
@yondensawyers2778
@yondensawyers2778 11 ай бұрын
I solved this a different way in linear time by using two stacks; one of factors where the top of the stack is the last number for the characters and another stack containing the substrings. whenever a ] character is detected it pops the two from their respective stacks, multiplies them, then appends it to the next top of the characters stack.
@sudoaptinstallrana9572
@sudoaptinstallrana9572 8 ай бұрын
can you share your solution i am thinking in the same way
@prafulparashar9849
@prafulparashar9849 2 жыл бұрын
Great explanation !! I was wondering whether we can do it solely by recursion calls?
@Cloud-577
@Cloud-577 2 жыл бұрын
yes you can
@Cloud-577
@Cloud-577 2 жыл бұрын
recursive is same as maintaining our own stack
@edwardteach2
@edwardteach2 2 жыл бұрын
U a God
@bumpin7789
@bumpin7789 2 жыл бұрын
How long do you actually take to solve these questions for the first time? It seems to take more than 1.5hrs for me.
@denni4070
@denni4070 Жыл бұрын
Just got this for a new grad position and I failed it miserably, should have watched more vids :(
@k999ford
@k999ford Жыл бұрын
Is there a reason you always do range(len(s)) instead of for x in s or enumerate(s)? I've been watching a lot of of these (great) videos and I noticed that, so I'm wondering...
@everydaylifeisgood
@everydaylifeisgood Жыл бұрын
I was giving this problem for google's phone interview today. I didn't do as well :(
@ethanwong2272
@ethanwong2272 2 жыл бұрын
It's much easier to write it in Python than in Java.
@CostaKazistov
@CostaKazistov 2 жыл бұрын
And even easier in Kotlin 😉
@hhcdghjjgsdrt235
@hhcdghjjgsdrt235 Жыл бұрын
stack makes this problem pretty much easier
@ksanjay665
@ksanjay665 10 ай бұрын
This was asked in Zoho software developer role
@amitupadhyay6511
@amitupadhyay6511 2 жыл бұрын
I did everything same except : substr+=stack.pop() and finally, substr=substr[::-1] and similar for k how m i am failing a test case. Could you please explain the difference ? Failed test case:"3[z]2[2[y]pq4[2[jk]e1[f]]]ef"
@chenhaibin2010
@chenhaibin2010 2 жыл бұрын
I guess you essentially have substr = substr + pop instead of pop + substr, so the order of letters are not the same.
@watchlistsclips3196
@watchlistsclips3196 2 жыл бұрын
I even getting the wrong answer in cpp with the same test you failed.Please tell where i did wrong. class Solution { public: string stuff(int n,string s) { string t; while(n--) t+=s; return t; } int stringToNum(string s) { int num=0; for(int i=0;i
@thanirmalai
@thanirmalai 11 ай бұрын
Amazing explanation but i cant think of why i cant solve it by myself
@Gaurav-ln8ze
@Gaurav-ln8ze Жыл бұрын
Thank you so much sir for your great and clear explanation. Here the code in c++ :- class Solution { public: string decodeString(string s) { string ans="", substr="", k; int n=s.size(); stack st; for(int i=0; i
@harshitrathore1744
@harshitrathore1744 2 жыл бұрын
Very Nice Explanation. Thanks, Buddy...
@MeetManga
@MeetManga 2 жыл бұрын
should line 16: k = stack.pop() * 10 +k ?
@CostaKazistov
@CostaKazistov 2 жыл бұрын
Then the digits of K number would be in the wrong order. Popping from the stack retrieves the digits in reverse order. Stepping it through in a debugger makes it easy to see.
@naodtewodrosasregdew2782
@naodtewodrosasregdew2782 8 ай бұрын
GOAT
@crazier192
@crazier192 2 жыл бұрын
The example showed with 54[ab] which has a 2 digits number. But the solution doesn't account for it. Hope you have time to update the video.
@CostaKazistov
@CostaKazistov 2 жыл бұрын
Actually it does. Line 15 while loop builds a string which then gets converted to Int on Line 17.
@crazier192
@crazier192 2 жыл бұрын
@@CostaKazistov Thank you! It's my bad, sorry.
@hoyinli7462
@hoyinli7462 2 жыл бұрын
support
@willcoomans9674
@willcoomans9674 Ай бұрын
what is the space complexity?
@andrewpaul6251
@andrewpaul6251 Жыл бұрын
It seems leetcode added a testcase and this code no longer works
@kazirafidraiyan2553
@kazirafidraiyan2553 Жыл бұрын
**This Works** class Solution: def decodeString(self, s: str) -> str: out_str = [] digit = 0 for i in range(len(s)): if s[i] != "]": out_str.append(s[i]) if s[i].isdigit(): digit += 1 else: sub_str = "" while out_str[-1] != "[": sub_str = out_str.pop() + sub_str out_str.pop() n = "" while out_str and out_str[-1].isdigit(): n = out_str.pop() + n n = int(n) out_str.append(int(n)*sub_str) if digit == len(s): return "" else: return "".join(out_str)
@sellygobeze7173
@sellygobeze7173 Жыл бұрын
🐐
@greatsunday4780
@greatsunday4780 Жыл бұрын
It is so difficult to put Sting and Character in the same stack.
@greatsunday4780
@greatsunday4780 Жыл бұрын
in java
@vaidehidharkar3348
@vaidehidharkar3348 2 жыл бұрын
Can someone compare iterative solution vs recursive solution, in terms of time complexity and suggest which one is better approach?
@dadisuperman3472
@dadisuperman3472 2 жыл бұрын
Same thing. No difference
@tynshjt
@tynshjt 6 ай бұрын
is there another way to solve this without using Stack?
@himanshuchauhan940
@himanshuchauhan940 Жыл бұрын
can anyone help me in solving it in recursively
@user-xf3li1lk7l
@user-xf3li1lk7l 9 ай бұрын
can any one explain the time complexity of it
@nanyangbuyuweng
@nanyangbuyuweng Жыл бұрын
I don't think the code can cover the corner case as "3"
@kalyanking1080
@kalyanking1080 2 жыл бұрын
Need recursive solution
@CostaKazistov
@CostaKazistov 2 жыл бұрын
Recursive solution would be easier to code up, yes. But the above solution would be preferred in an interview setting.
@rahulpothula1902
@rahulpothula1902 Жыл бұрын
my c++ solution(same logic as explained in the video): class Solution { public: string decodeString(string s) { stack stk; string str = ""; for(auto it: s) { if(it >= 'a' and it = '0' and it = "0" and stk.top() 0) counts = stoi(count); for(int i = 0; i < counts - 1; i++) str += str1; stk.push(str); } } string ans = ""; while(!stk.empty()) { ans = stk.top() + ans.substr(0, ans.length()); stk.pop(); } return ans; } };
@ChinmayAnaokar-xm4ci
@ChinmayAnaokar-xm4ci Жыл бұрын
C# code for above logic : public static class AppHelper { public static String DecodeString(String s) { Stack st = new Stack(); for (int i = 0; i < s.Length; i++) { if (s[i] != ']') { st.Push(s[i]); } else { string curr_str = ""; while (st.Peek() != '[') { curr_str = st.Peek() + curr_str; st.Pop(); } st.Pop(); string number = ""; while (st.Count > 0 && Char.IsDigit(st.Peek())) { number = st.Peek() + number; st.Pop(); } int noKTimes = Convert.ToInt32(number); while (noKTimes > 0) { for (int p = 0; p < curr_str.Length; p++) { st.Push(curr_str[p]); } noKTimes--; } } } s = ""; while (st.Count > 0) { s = st.Peek() + s; st.Pop(); } return s; } }
@dohunkim2922
@dohunkim2922 Жыл бұрын
the part where you did “while stack and stack[-1].isdigit():” kinda confuses me. Isn’t the stack always nonempty? There always has to be an integer in front of ‘[‘, otherwise we don’t even need to use brackets. Validating whether the stack is empty or not doesn’t seem to be necessary, but the code doesn’t work if I don’t validate it. I’m so lost here
@D_T244
@D_T244 Жыл бұрын
If our input is "23[a]", when we get to line 15 our stack will contain just [2, 3], we have to keep popping numbers but we need to stop once the stack is empty else we'll get an index error when doing stack[-1].isdigit() check. The isdigit() check catches the following case: input = 23[a4[b]] then our stack will be [2, 3, [, a, 4] when we get to that line 15, isdigit() will make sure we don't pop past the number 4 for the current substring we're building.
@dohunkim2922
@dohunkim2922 Жыл бұрын
@@D_T244 ohh i didnt consider the case where the integer is a 2digit number. Thansk!!
@ankitkaushal442
@ankitkaushal442 2 жыл бұрын
wow
@omkarbhale442
@omkarbhale442 10 ай бұрын
Instead of concatenating to string, I appended them all to a list, and called list.reverse() 😅😅 p.s. Stop scrolling comments, and solve some probolems.
@user-jr4qw7di9e
@user-jr4qw7di9e 4 ай бұрын
can you do this using recurssion
@Antinormanisto
@Antinormanisto 4 ай бұрын
i don't understand why does it work
@RishirajDesigns
@RishirajDesigns 11 ай бұрын
every time he said "IN PYTHON", I was looking at my Java code, it was like speaking to me: What? don't look at me like that, go and search on google.
@Tony-un9mg
@Tony-un9mg 7 ай бұрын
GOAT
Dota2 Senate - Leetcode 649 - Python
14:48
NeetCodeIO
Рет қаралды 18 М.
Word Break - Dynamic Programming - Leetcode 139 - Python
15:35
Wait for the last one! 👀
00:28
Josh Horton
Рет қаралды 145 МЛН
DO YOU HAVE FRIENDS LIKE THIS?
00:17
dednahype
Рет қаралды 80 МЛН
Vivaan  Tanya once again pranked Papa 🤣😇🤣
00:10
seema lamba
Рет қаралды 32 МЛН
КАРМАНЧИК 2 СЕЗОН 7 СЕРИЯ ФИНАЛ
21:37
Inter Production
Рет қаралды 517 М.
How I would learn Leetcode if I could start over
18:03
NeetCodeIO
Рет қаралды 309 М.
Find All Anagrams in a String - Leetcode 438 - Python
12:14
NeetCode
Рет қаралды 76 М.
Evaluate Division - Leetcode 399 - Python
17:37
NeetCodeIO
Рет қаралды 24 М.
5 Useful F-String Tricks In Python
10:02
Indently
Рет қаралды 273 М.
Big-O Notation - For Coding Interviews
20:38
NeetCode
Рет қаралды 423 М.
8 patterns to solve 80% Leetcode problems
7:30
Sahil & Sarra
Рет қаралды 228 М.
Game of Life - Leetcode 289 - Python
17:36
NeetCode
Рет қаралды 36 М.
Урна с айфонами!
0:30
По ту сторону Гугла
Рет қаралды 8 МЛН
⚡️Супер БЫСТРАЯ Зарядка | Проверка
1:00
Опыт использования Мини ПК от TECNO
1:00
Андронет
Рет қаралды 648 М.