网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
**🍐 在解决一些问题时,我们首先要考虑这些问题的极端性
🍉 首先分析不匹配的情况,一共有三种情况:
1️⃣:左括号多余**
当遍历完字符串后栈不为空,则说明有多余的左括号,return flase.
2️⃣: 右括号多余
当遍历过程中遇到右括号时,栈为空,则说明右括号多余,return false.
3️⃣: 括号没有多余,但是括号的类型没有对应上。
当遍历过程中遇到右括号时,栈顶元素与之不对应,则说明括号的类型没有对应上,return false.
三、问题实现
// 用栈解决 // 数组模拟栈 bool isValid(char * s) { // 计算 原数组长度 int len = strlen(s); // 先重新开辟一个动态数组来存储栈 (在堆上开辟) int* stack = (int*)malloc(sizeof(int)*len); // 记录插入栈中的数据个数 int count = 0; // 此时count指向的是栈中有效数据的下一个位置 也就是栈顶指针 // 开始遍历整个数据 for(int i = 0; i < len; i++) { // 开始遍历 先遍历左括号在遍历右括号 if(s[i]=='(') { stack[count++] = ')'; } else if(s[i]=='[') { stack[count++] = ']'; } else if(s[i]=='{') { stack[count++] = '}'; } // count=0 表示 右括号多余 // stack[count-1]=s[i] 表示 类型没对上 else if(count==0||stack[count-1]!=s[i]) { return false; } else { count--; } } // 当遍历完整个数组,栈理应为空,如果栈没空 表示左括号多余 return count==0; //栈中无任何元素,说明全部匹配成功 }
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
s/618668825)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!