青训营X豆包MarsCode 技术训练营第六课 | 实践记录以及工具使用 | 豆包MarsCode AI 刷题

37 阅读3分钟

在经过这么多天的刷题,我深刻感受到了AI对我刷题的帮助。它可以在我答题遇到困难时为我提供解决的方案,也可以在我代码报错时对我的代码进行检查,帮助我修改代码,让我能更快的理解代码。以下是我在做题中使用AI工具的实践:

一.案例实践分析

问题描述

小R有一个括号字符串 s,他想知道这个字符串是否是有效的。一个括号字符串如果满足以下条件之一,则是有效的:

1.它是一个空字符串;

2.它可以写成两个有效字符串的连接形式,即 AB;

3.它可以写成 (A) 的形式,其中 A 是有效字符串。

在每次操作中,小R可以在字符串的任意位置插入一个括号。你需要帮小R计算出,最少需要插入多少个括号才能使括号字符串 s 有效。

例如:当 s = "())" 时,小R需要插入一个左括号使字符串有效,结果为 1。

在我看到这一道题的时候我是非常开心的,因为数据结构课时刚好老师讲过,于是我变信心满满的准备做这道题,但我很快就迎来了一个问题,那就是数据结构是用C++讲的,我会写的也知识C++的写法,但时Java的写法适合C++不一样的,首先怎么初始化一个栈我就遇到了难点,但我还是先用C++写了一次,结果很显然没有成功,但是我看见代码区旁边有豆包自带的AI助手,而它可以帮助我,于是,我就向他求助,他指出了我的代码错误与修改建议。

屏幕截图 2024-11-28 200224.png

而且它也给出了代码框架,里面就有在Java中栈的应用方法,解决了我的一个大问题,最后我也是在AI的帮助下顺利的写完了代码。正确代码如下:

    public static int solution(String s) {
        // write code here
        Stack<Character> stack =new Stack<>();
        int insertCount=0;

        for (int i = 0; i < s.length(); i++) {
            char c=s.charAt(i);
            if(c=='('){
               stack.push(c);
            }else if(c==')'){
                if(!stack.isEmpty()&&stack.peek()=='('){
                    stack.pop();
                }else{
                    insertCount++;
                }
            }
        }
        insertCount+=stack.size();
        return insertCount; 
    }

二.思路解析

1. 初始化:

创建一个栈 stack 来存储左括号 (。
初始化一个计数器 insertCount 来记录需要插入的括号数量。

2.遍历字符串

对于字符串中的每一个字符 c:
如果 c 是左括号 (,将其压入栈中。
如果 c 是右括号 ),检查栈顶是否有左括号:
如果有左括号,弹出栈顶的左括号(表示匹配成功)。
如果没有左括号,说明需要插入一个左括号来匹配当前的右括号,因此 insertCount 加一。

3.处理剩余的左括号:

遍历结束后,栈中剩余的左括号数量就是需要插入的右括号数量。
将栈的大小加到 insertCount 上。

4.返回结果:

返回 insertCount 作为最终结果。

三.总结

基于此次AI助手的帮助,我发现在写题中AI助手能帮助我们解决很多我们可能还未掌握的知识如何使用,为我们解题提供了很多的便利。因此,在未来我希望我可以借助AI助手学到更多编程知识。