Minimum Deletions to Make String Balanced - Leetcode 1653 - Python

  Рет қаралды 12,641

NeetCodeIO

NeetCodeIO

Күн бұрын

Пікірлер: 74
@jayrathod9271
@jayrathod9271 4 ай бұрын
I applied the same approach. This is a rare moment where I could solve it myself in 1.5 hr. Thank you @NeetCodeIO for such a great explanation every day.
@thenameisafsal
@thenameisafsal 4 ай бұрын
The question was not understandable to me initially, but your solution has cleared it up and now I'm clear at it. Thanks man!
@yuvarajyuvi9691
@yuvarajyuvi9691 4 ай бұрын
We don't even need to track a_count , whenever we encounter "a" we can check if there is a b before and decrement b_count and add 1 to result def minimumDeletions(self, s: str) -> int: res = 0 bc = 0 for i in range(len(s)): if s[i] == "b": bc += 1 elif s[i] == "a" and bc > 0: bc -= 1 res += 1 return res
@michaelroditis1952
@michaelroditis1952 4 ай бұрын
Exactly this is the fastest solution
@jamestwosheep
@jamestwosheep 4 ай бұрын
I managed to solve this one with a stack in O(n) time complexity, but I really like how you managed to get that O(1) space complexity solution. 👏👏
@wasd3108
@wasd3108 4 ай бұрын
there's a better solution with 1 iteration only
@pcgaming6597
@pcgaming6597 4 ай бұрын
For Java people : public int minimumDeletions(String s) { int n=s.length(); int countMin=n; int countRight_a=0; for(int i=0;i
@ZaneMouakket
@ZaneMouakket 3 ай бұрын
At first I did a 2d DP solution with one dimension being the start and one being the end and the number stored in the matrix is how many had to be deleted for everything between start and end to be balanced. I always assumed if there is a solution like this that it would be the fastest, but no matter how I optimized it, it either got TLE or MLE. Thank you for explaining the correct solution so well.
@jotrades26
@jotrades26 3 ай бұрын
I like this, you gave a short about negate the problem and it works here even the previous one 👌👌👌
@vm1662
@vm1662 3 ай бұрын
The solution is beautiful!!!! Thank you.
@michaelroditis1952
@michaelroditis1952 4 ай бұрын
You can do it with one loop You keep track of the b_count and each time you encounter an 'a' while b_count is greater than 0, you add 1 to the result and subtract 1 from b_count
@keyurparmar2595
@keyurparmar2595 4 ай бұрын
Yeh, correct Thank you for showing me a new direction to think
@michaelroditis1952
@michaelroditis1952 4 ай бұрын
@@keyurparmar2595 of course! 😁 If you want I can further explain this
@qulinxao
@qulinxao 3 ай бұрын
v,w=[0,0],lambda x:x=='a' for c in map(w,s):v[c]=max(v[-c:])+1 return len(s)-max(v)
@pratyushthakur8478
@pratyushthakur8478 4 ай бұрын
I am sad I couldn't solve this without looking at hints :(
@AJK-a2j00k4
@AJK-a2j00k4 4 ай бұрын
I got fucked with edge cases even after looking at the hints and came here :(
@kareni7572
@kareni7572 4 ай бұрын
Calculating the result between the if's is interesting. Understood after running it myself
@nirmalgurjar8181
@nirmalgurjar8181 4 ай бұрын
from last 2 POTDs invert actually became mid, instead of solving from top-down or bottom-up consider current element as mid element and start building solution gives as optimal/better clean solution.
@kgCode658
@kgCode658 4 ай бұрын
int n = s.size(); vector left(n,0); vector right(n,0); int cntLeft = 0; int cntRight = 0; for(int i=0 ; i
@sagnikbiswas3268
@sagnikbiswas3268 3 ай бұрын
Iterate over minimal B index. Clear A’s to the right and clear all B’s to the left. Simple
@omkara477
@omkara477 4 ай бұрын
I love neetcode.. 2 minutes into the video and im like ya i can take it from here thanx man! 😂😂
@yang5843
@yang5843 4 ай бұрын
Java Solution class Solution { public int minimumDeletions(String s) { int a = s.replaceAll("b","").length(); int b = 0; int res = a; for ( char c : s.toCharArray() ) { if ( c == 'a' ) a--; else if ( c == 'b' ) b++; res = Math.min(res,a+b); } return res; } }
@qulinxao
@qulinxao 4 ай бұрын
class Solution: def minimumDeletions(self, s: str) -> int: v=[0,0] for c in [ord(c)-97 for c in s]: v[c]=max(v[0],v[c])+1 return len(s)-max(v)
@yang5843
@yang5843 4 ай бұрын
Was waiting for this, thank you
@aashishbathe
@aashishbathe 4 ай бұрын
class Solution: def minimumDeletions(self, s: str) -> int: res = count = 0 for char in s: if char == 'b': count += 1 else: if count: res += 1 count -= 1 return res THIS also seems to work somehow, one pass solution..
@haotang4717
@haotang4717 3 ай бұрын
This seems better. Related to parentheses problem. Each reversion of b and a needs at least one deletion.
@kawaljeetsingh1657
@kawaljeetsingh1657 4 ай бұрын
Thanks, Navdeep....
@MP-ny3ep
@MP-ny3ep 4 ай бұрын
Beautiful explanation. Thank you.
@ayobrrr
@ayobrrr 4 ай бұрын
i am so dumb, as soon as you said 0:43 - we can draw partition, i straightly went back and implemented lol 😂😂
@САИДАМАГОМЕДДИБИРОВА
@САИДАМАГОМЕДДИБИРОВА 4 ай бұрын
👍👍👍👍👍thank you!
@qulinxao
@qulinxao 3 ай бұрын
clearer:class Solution: def minimumDeletions(self, s: str) -> int: v,w=[0,0],lambda x:x=='a' for c in map(w,s):v[c]=max(v[-c:])+1 return len(s)-max(v)
@flamendless
@flamendless 4 ай бұрын
At work: implemented a very efficient code Boss: how do you know it's the most efficient without benchmarking? Me: it is, i promise. Trust me
@venkatexplorermetturdam
@venkatexplorermetturdam 4 ай бұрын
Bro please continue in python Thanks It makes me to learn more and start dsa channel ❤😊
@dan_____
@dan_____ 4 ай бұрын
You can actually view this problem in a different way. All we care about is the minimum amount of deletions, or CONFLICTS in the string. A conflict happens when a B comes before an A. This means every appearance of a B is a POTENTIAL conflict. A potential conflict is solidified when we encounter an A. When that happens, we can increment our answer and decrease the amount of potential conflicts.
@samarthjain5015
@samarthjain5015 4 ай бұрын
I'm surprised they haven't run out of "balanced" titles.
@anandsahoo3711
@anandsahoo3711 4 ай бұрын
if anyone is wondering why the same solution doesn't work in java just change the length of res=a_count_right
@王瀚君-c3j
@王瀚君-c3j 4 ай бұрын
Thank you man
@md_pedia1
@md_pedia1 4 ай бұрын
why can't we just use a stack. every time we see an a followed by a b we could pop from the stack and increment res by 1. And it worked for me😐😐
@vijayanks1714
@vijayanks1714 4 ай бұрын
that is ba if ba pair exist remove and increment the count
@ayushmandash948
@ayushmandash948 4 ай бұрын
there's a test case that fails for the stack approach that I tried, "aaaaaabbbbabaaaabbabaaabbabbbaaabababaaaaaaabbaaabaaababaaabababa"
@md_pedia1
@md_pedia1 4 ай бұрын
​@@ayushmandash948 try this: res=0 st=[] for i in s: if i=='a' and st: st.pop() res+=1 elif i=='b': st.append(i) return res
@md_pedia1
@md_pedia1 4 ай бұрын
@@ayushmandash948 try this: res=0 st=[] for i in s: if i=='a' and st: st.pop() res+=1 elif i=='b': st.append(i) return res
@shubham6523
@shubham6523 4 ай бұрын
@@ayushmandash948 bro i tried with the stack soln and this testcase working with my soln
@sourvad
@sourvad 3 ай бұрын
Very demotivated that I could not even approach this problem, not even a clue where to begin :(
@greatfate
@greatfate 4 ай бұрын
not most optimal, there's a one pass solution which is also O(1) space
@minhtungbui2002
@minhtungbui2002 4 ай бұрын
Another solution for this problem is Stack =))
@aadil4236
@aadil4236 4 ай бұрын
Why am I alwasy thinking of DP!! I figured out the solution when kind of gave the hint at 3:00. God I'm stupid.
@knight-uy7bp
@knight-uy7bp 4 ай бұрын
For java folks leetcode.com/problems/minimum-deletions-to-make-string-balanced/solutions/5560581/neetcode-java-greedy-solution/
@DNKF
@DNKF 4 ай бұрын
This video is a must have before my everyday dinner. =] I have a suggestion for future Java, C++ or other languages classes. Since we have most videos in Python and Python has lot of good tricks, if you can make "conversion" class like Python tricks to Java or C++, it would be great for beginner.
@MehmetDemir-xi3yy
@MehmetDemir-xi3yy 4 ай бұрын
I know this solution gives correct output but for intermediate steps I think it does not. For example s = "bbba", when you calculate for last b, there are 2 b left and 1 a right so you found 3 operation. But we can just delete "a" and good to go. So I am saying at the end of the algorithm we find correct result but not in intermediate ones.
@pritampadhan5977
@pritampadhan5977 4 ай бұрын
Bro the point is where we place the pointer such that we have to delete minimum characters. In your example in suitable when we keep the pointer at 1st 'b' and that's the solution.
@MehmetDemir-xi3yy
@MehmetDemir-xi3yy 4 ай бұрын
​@@pritampadhan5977 I couldnt get it 🤔
@MehmetDemir-xi3yy
@MehmetDemir-xi3yy 4 ай бұрын
I repeat, I understood the solution but I couldnt understand or it doesnt make sense for intermediate result. Lets think more basic example. S="bbb" when we calculate for 3rd "b" there are 2b and zero a. So we find 2 operation. But thats not the case. I am saying this because when I solve questions if it doesnt make sense at any point I just give up that solution
@dss963
@dss963 4 ай бұрын
I don't think this solution is correct in all aspects, .Why should someone delete all "b"s on left and all "a"s on right? Why cant we delete all chars of particular type on one side , but not both type, even that satisfy the condition and is the minimum btw?
@AJK-a2j00k4
@AJK-a2j00k4 4 ай бұрын
the code he wrote includes that as well bro! maybe try these test case : "bbbbbbbaa"
@zweitekonto9654
@zweitekonto9654 4 ай бұрын
Because that's what will give you the minimum? If you also start deleting characters of the other type that had no problem if they were left as it is, you are unnecessarily increasing your number of operations.
@ajitpalsingh606
@ajitpalsingh606 4 ай бұрын
Doing after 10 hr of driving
@corrogist692
@corrogist692 4 ай бұрын
did it with a sliding window with O(n)&O(1), then saw a super smart 8 lines solution up there lol ``` ans, count = 0, 0 for i in s: if i == 'b': count += 1 elif count: ans += 1 count -= 1 return ans ```
@sahilmalik8670
@sahilmalik8670 4 ай бұрын
mate can u explain the elif line
@janaSdj
@janaSdj 4 ай бұрын
Nice
@yang5843
@yang5843 4 ай бұрын
​@@sahilmalik8670if u see a 'a' and there was already a 'b', you have to increment res to remove one of the the 'b's
@corrogist692
@corrogist692 4 ай бұрын
@@sahilmalik8670 try to use an example and simulate the iterations, basically it is keeping track of the minimum of the rolling 'a's/'b's
@AJK-a2j00k4
@AJK-a2j00k4 4 ай бұрын
how did u do it with sliding window btw?
@EdificioPepinutalini
@EdificioPepinutalini 4 ай бұрын
you like to code, i like to create. This is why ur so scared of LLMs.
@NeetCodeIO
@NeetCodeIO 4 ай бұрын
you got me there
@dipakmaity2205
@dipakmaity2205 4 ай бұрын
first comment sir
Understanding Ownership in Rust
25:30
Let's Get Rusty
Рет қаралды 267 М.
1, 2, 3, 4, 5, 6, 7, 8, 9 🙈⚽️
00:46
Celine Dept
Рет қаралды 117 МЛН
How to Fight a Gross Man 😡
00:19
Alan Chikin Chow
Рет қаралды 17 МЛН
Мама у нас строгая
00:20
VAVAN
Рет қаралды 11 МЛН
Maximum Number of Points with Cost - Leetcode 1937 - Python
15:15
How I would learn Leetcode if I could start over
18:03
NeetCodeIO
Рет қаралды 695 М.
5 Useful F-String Tricks In Python
10:02
Indently
Рет қаралды 330 М.
I Solved 1583 Leetcode Questions  Here's What I Learned
20:37
ThePrimeTime
Рет қаралды 740 М.
Maximum Score From Removing Substrings - Leetcode 1717 - Python
22:25
Making an Algorithm Faster
30:08
NeetCodeIO
Рет қаралды 150 М.
The LeetCode Fallacy
6:08
NeetCode
Рет қаралды 576 М.
My 10 “Clean” Code Principles (Start These Now)
15:12
Conner Ardman
Рет қаралды 286 М.
Ugly Number II - Leetcode 264 - Python
15:17
NeetCodeIO
Рет қаралды 15 М.
1, 2, 3, 4, 5, 6, 7, 8, 9 🙈⚽️
00:46
Celine Dept
Рет қаралды 117 МЛН