leetcode learnning

  |  

力扣刷题

2023.7.15 刷题记录

有效的括号

题目

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public boolean isValid(String s) {
int n = s.length();
if (n % 2 == 1) {
return false;
}

Map<Character, Character> pairs = new HashMap<Character, Character>() {{
put(')', '(');
put(']', '[');
put('}', '{');
}};
Deque<Character> stack = new LinkedList<Character>();
for (int i = 0; i < n; i++) {
char ch = s.charAt(i);
if (pairs.containsKey(ch)) {
if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
return false;
}
stack.pop();
} else {
stack.push(ch);
}
}
return stack.isEmpty();
}
}

思路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    本题考察字符串以及栈的使用。注意栈在java中一般有3种
普通队列(一端进另一端出):
Queue queue = new LinkedList()或Deque deque = new LinkedList()
双端队列(两端都可进出)
Deque deque = new LinkedList()
堆栈
Deque deque = new LinkedList()

具体思路:
1.我们遍历给定的字符串 sss。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。
2.由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。
3.当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。
4.此时,我们可以取出栈顶的左括号并判断它们是否是相同类型的括号。
5.如果不是相同的类型,或者栈中并没有左括号,那么字符串 sss 无效,返回 False。
6.为了快速判断括号的类型,我们可以使用哈希表存储每一种括号。哈希表的键为右括号,值为相同类型的左括号。
7.在遍历结束后,如果栈中没有左括号,说明我们将字符串 sss 中的所有左括号闭合,返回 True否则返回 False
8.注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 False,省去后续的遍历判断过程。

队列的语法学习

动作 插入第一个元素(首部) 插入最后一个元素(尾部)
插入 addFirst(e) addLast(e)
删除 removeFirst() addLast(e)
取出 getFirst() getLast()
等效性 Queue方法 等效Deque方法
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() pollFirst()
peek() pollFirst()
等效性 堆栈方法 等效Deque方法
push(e) addFirst(e)
pop() removeFirst()
peek() removeFirst()

键盘行

题目:

思路:

  1. 将第一行、第二行字母用字符串表示(包含大小写)

  2. 由于题目要求返回String数组,而String数组不能动态更改(初始化大小后数组种会出现null),因此使用ArrayList做存储,最后将ArrayList转换即可

  3. 遍历输入的字符串数组,遍历每个字符串,用f,t,s记录一个字符串中出现第一行、第二行、第三行字母的数量,只有f0或t0或s==0时,才符合题意

  4. 最后进行ArrayList与String[]转换,即result = (String[])re.toArray(new String[re.size()]);

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Solution {
public String[] findWords(String[] words) {
String firstWords = "qwertyuiopQWERTYUIOP";
String secondWords = "asdfghjklASDFGHJKL";
ArrayList<String> re = new ArrayList<>();
String []result = new String[words.length];
for(String word : words)
{
int f = 0 ,s = 0 ,t=0;
for(int i = 0 ; i < word.length() ; i++)
{
if((f!=0&&s!=0)||(f!=0&&t!=0)||(t!=0&&s!=0))
{
break;
}
if(firstWords.indexOf(word.charAt(i)) != -1)
{
f++;
}
else if (secondWords.indexOf(word.charAt(i)) != -1)
{
s++;
}
else
{
t++;
}

}
if(f == word.length() || s == word.length() || t == word.length())
{
re.add(word);
}
result = (String[])re.toArray(new String[re.size()]);
}
return result;
}
}

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 力扣刷题
    1. 1.1. 2023.7.15 刷题记录
      1. 1.1.1. 有效的括号
      2. 1.1.2. 键盘行
载入天数...载入时分秒...
,
字数统计:36.3k