It seems that coding tests are conducted overseas in interviews with engineers, and in many cases, the main thing is to implement specific functions and classes according to the theme.
Apparently, many engineers take measures on the site called LetCode.
It is a site that trains the algorithmic power that can withstand the coding test that is being done in the early story, and it is an inevitable path for those who want to build a career at an overseas tech company.
I wrote it in a big way, but I have no plans to have such an interview at the moment.
However, as an IT engineer, it would be better to have the same level of algorithm power as a person, so I would like to solve the problem irregularly and write down the method I thought at that time as a memo.
I'm solving it with Python3.
Leet Code Table of Contents Starting from Zero
Last time Leet Code Day 57 starting from zero "35. Search Insert Position"
Right now, I'm prioritizing the Medium of the Top 100 Liked Questions. I solved all Easy, so if you are interested, please go to the table of contents.
Twitter I'm doing it.
20. Valid Parentheses The difficulty level is Easy.
The question is, if given a string s
that contains only the characters'(',')','{','}','[' and']', is the string entered valid? To judge.
The input character string is effective in the following cases.
Open parentheses must be closed with the same type of parentheses. The parentheses must be closed in the correct order. Note that an empty string is also considered valid.
Input: "()" Output: true
Input: "()[]{}" Output: true
Input: "(]" Output: false
Input: "([)]" Output: false
Input: "{[]}" Output: true
As you can see from the example, if the parentheses are completed separately, it can be True
, otherwise it can be False
, and so on.
I think it's easier to manage using a stack if you can check the beginning and end exactly.
For example, consider the case of ʻInput:" {[]} ". Use the for statement to substitute
s for
charand read from the front. Then, the order of the characters to be read is
'{','[',']','}'`.
You have to check that the if statement is closing the parentheses in the correct order.
Therefore, you need to prepare your own set of parentheses to check.
I think that it is common to manage it with a list or a dictionary here.
If you manage the elements in parentheses in a list
open_str = ["[","{","("] close_str = ["]","}",")"]
It looks like this
If you manage with a dictionary
dict = {")":"(","]":"[","}":"{"}
It will look like this. This time I used the dictionary.
By the way, if you come to this point, if the char
element exists in the dict
when you turn it with the for statement, you can write the processing when it does not exist.
What if the element was in dict.values
?
In that case, you should add it to the prepared stack
.
As you all know, the nature of the stack is LIFO (Last in first out), so the stack to be taken out from the end is convenient in this case.
Then, what should we do if char
exists in dict.keys
, and finally in other cases?
In that case, I wrote a new process as follows.
if stack == [] or dict[char] != stack.pop():
return False
In such cases, if either of these is true, False
Returns.
Conversely, if this is not the case, the process continues.
And if it doesn't match any of the conditions I've written so far, it returns False
.
The contents written together are as follows.
class Solution:
def isValid(self, s: str) -> bool:
stack = []
dict = {")":"(","]":"[","}":"{"}
for char in s:
if char in dict.values():
stack.append(char)
elif char in dict.keys():
if stack == [] or dict[char] != stack.pop():
return False
else:
return False
return stack == []
# Runtime: 36 ms, faster than 30.47% of Python3 online submissions for Valid Parentheses.
# Memory Usage: 13.8 MB, less than 77.84% of Python3 online submissions for Valid Parentheses.
The solution part is longer than I expected ... It may be easier for the reader to write more quickly. I would like to write while thinking about various things on the part of the reader.
To change the story, I've been learning about CS recently, not just algorithms and data structures, but it's fun to study the genres I'm interested in!
So that's it for this time. Thank you for your hard work.
Recommended Posts