Make The String Great - Leetcode 1544 - Python

  Рет қаралды 6,859

NeetCodeIO

NeetCodeIO

Күн бұрын

Пікірлер: 29
@AnordinaryMan007
@AnordinaryMan007 5 ай бұрын
I don't know but i didn't able to solve it with just loop because there are some cases when string becomes bad after removing character so have to check that also for which stack is perfect don't know if you can solve it just by loop.
@suvajitchakrabarty
@suvajitchakrabarty 5 ай бұрын
That sounds reasonable. Definitely easier to solve it with a stack.
@1vader
@1vader 5 ай бұрын
You can just loop with an index and decrease the index when removing characters: def makeGood(self, s: str) -> str: i = 0 while i < len(s) - 1: if s[i] != s[i + 1] and s[i].lower() == s[i + 1].lower(): if i == 0: s = s[2:] else: s = s[:i] + s[i+2:] i -= 1 else: i += 1 return s Although it has worse runtime than the stack solution because it's allocating new strings on every removal.
@yang5843
@yang5843 5 ай бұрын
Make string great again
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
🇺🇲
@kevinhklee
@kevinhklee 5 ай бұрын
You could also check if the difference between the character and and the top of the stack is either the lower case or upper case version of the char by doing abs(ord(char) - ord(stack[-1])) == 32. This works as the ASCII character difference between the upper and lower case versions of the char is always 32.
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
Great solution! I personally wouldn't be able to remember the difference is 32 tho.
@kevinhklee
@kevinhklee 5 ай бұрын
@@NeetCodeIO True, it’s probably one of those things that would be hard to remember on the spot during an interview, but after grinding for a while and seeing it used in different places it’s a pattern you pick up on the road to leetcode enlightenment. 😁
@amongus-rq2hb
@amongus-rq2hb 5 ай бұрын
i solved it in my own thanks to you
@adityamwagh
@adityamwagh 5 ай бұрын
Me too. Felt quite smart 😛
@JLSXMK8
@JLSXMK8 5 ай бұрын
Great! You even implemented a custom version of the str().lower() function; 8:59 however, you may not have had the correct "if" condition. A more accurate condition would be to say "if ord('a') > ord(c) >= ord('A'):", then convert the character to lowercase. Try your implementation with any numerical character and compare it with the str().lower() function; you'll instantly see why this works if you look at an ASCII chart. I'm not meaning to brag, you probably fixed this error yourself; but just in case anybody types that and is like "Why are these two functions giving different results??" I may have an answer.
@theSDE2
@theSDE2 5 ай бұрын
this daily LC solutions are good to keep on track.
@rohitkumaram
@rohitkumaram 5 ай бұрын
can we just put the if condition like: if abs(ord(stack[-1])-s[i])==32:
@BurhanAijaz
@BurhanAijaz 5 ай бұрын
just saw your explanation and came up with this code: class Solution: def makeGood(self, s: str) -> str: st=[s[0]] for i in range(1,len(s)): if len(st) and st[-1]!=s[i]: if st[-1].lower()==s[i].lower(): st.pop() else: st.append(s[i]) else: st.append(s[i]) return ''.join(st)
@pastori2672
@pastori2672 5 ай бұрын
great strings bro
@ecchioni
@ecchioni 5 ай бұрын
Why not use the built in islower isupper functions?
@jayberry6557
@jayberry6557 5 ай бұрын
Cause you also need to check if both characters are the same
@ecchioni
@ecchioni 5 ай бұрын
@@jayberry6557 Stack stack = new Stack(); foreach(char ch in s) { if(stack.Count > 0) { if((Char.IsUpper(stack.Peek()) && Char.IsLower(ch)) && (Char.ToUpper(ch) == stack.Peek())) stack.Pop(); else if((Char.IsLower(stack.Peek()) && Char.IsUpper(ch)) && (Char.ToLower(ch) == stack.Peek())) stack.Pop(); else stack.Push(ch); } else stack.Push(ch); } char[] res = stack.ToArray(); Array.Reverse(res); return new String(res); this is what I did.
@chrischika7026
@chrischika7026 5 ай бұрын
@@jayberry6557 you can us isupper and slower if you want tough
@sidhartheleswarapu
@sidhartheleswarapu 5 ай бұрын
Why not just check that the absolute value of the ASCII value difference is 32?
@dodo2892
@dodo2892 5 ай бұрын
I do this, but I do not use stack I use recursion and pass a change parameter to the function, if change was 0, the string do not have any bad letters so I return
@firstyfirst
@firstyfirst 5 ай бұрын
how do u handle string becoming bad again after removal bcz next char appearing is capital of what u kept initially , no thought on this , ?
@kaankahveci1153
@kaankahveci1153 4 ай бұрын
class Solution { public String makeGood(String s) { Stack stack = new Stack(); for(char c : s.toCharArray()) { if(!stack.isEmpty() && areOppositeCases(stack.peek(), c)) { stack.pop(); // they cancel each other out } else { stack.push(c); // keep the character } } StringBuilder result = new StringBuilder(); for(char c:stack) { result.append(c); } return result.toString(); } private boolean areOppositeCases(char a, char b) { return Math.abs(a - b) == 32; } }
@ferb7o2
@ferb7o2 5 ай бұрын
class Solution: def makeGood(self, s: str) -> str: stack = [] for letter in s: if not stack: stack.append(letter) continue prev = stack[-1] if abs(ord(prev) - ord(letter)) == 32: stack.pop() else: stack.append(letter) return "".join(stack) #Time Complexity: O(n) #Space Complexity: O(n)
@31redorange08
@31redorange08 5 ай бұрын
Problems using only ASCII characters should be forbidden. They only train you not to consider all Unicode characters, leading to bugs and potentially security vulnerabilities.
@TF2Shows
@TF2Shows 5 ай бұрын
Do you come up with the solution yourself or are you looking at the solutions?
@akialter
@akialter 5 ай бұрын
Why python strings are immutable
@k.k.harjeeth5422
@k.k.harjeeth5422 5 ай бұрын
class Solution: def makeGood(self, s: str) -> str: stack=[s[0]] for i in range(1,len(s)): if(stack and s[i]!=stack[-1] and s[i].lower()==stack[-1].lower()): stack.pop() else: stack.append(s[i]) return "".join(stack)
Number of Students Unable to Eat Lunch - Leetcode 1700 - Python
8:22
The Flaws of Inheritance
10:01
CodeAesthetic
Рет қаралды 937 М.
So Cute 🥰
00:17
dednahype
Рет қаралды 45 МЛН
Violet Beauregarde Doll🫐
00:58
PIRANKA
Рет қаралды 49 МЛН
Bend The Impossible Bar Win $1,000
00:57
Stokes Twins
Рет қаралды 42 МЛН
Люблю детей 💕💕💕🥰 #aminkavitaminka #aminokka #miminka #дети
00:24
Аминка Витаминка
Рет қаралды 1,3 МЛН
How to Solve ANY LeetCode Problem (Step-by-Step)
12:37
Codebagel
Рет қаралды 203 М.
Why I focus on patterns instead of technologies
7:55
NeetCodeIO
Рет қаралды 222 М.
This Algorithm is 1,606,240% FASTER
13:31
ThePrimeagen
Рет қаралды 812 М.
Python Basics - Functions
42:56
Tonia AI
Рет қаралды 17
All Rust string types explained
22:13
Let's Get Rusty
Рет қаралды 168 М.
Programmers in 2024 have no Deep Knowledge
8:38
NeetCodeIO
Рет қаралды 178 М.
Dynamic Programming isn't too hard. You just don't know what it is.
22:31
DecodingIntuition
Рет қаралды 129 М.
How I would learn Leetcode if I could start over
18:03
NeetCodeIO
Рет қаралды 489 М.
Mastering Dynamic Programming - How to solve any interview problem (Part 1)
19:41
The size of your variables matters.
11:03
Core Dumped
Рет қаралды 114 М.
So Cute 🥰
00:17
dednahype
Рет қаралды 45 МЛН