网站首页 > 技术文章 正文
时间太短;当时有点懵;后来想了一下做个记录;
题目:
//求合法括号的字符串个数
// 审题:
//2.合法的类型枚举:
// 嵌套行(())( ( 4
// 父子行 ))(()())(( 6
//3.不考虑正则等方式;只能用js
就一两分钟答题时间:
刚开始的思路
// 审题:
//2.合法的类型枚举:
// 嵌套行(())
// 父子行 (()())
// ((())(
//3.不考虑正则等方式;只能用js
//4. 他们的共同点
// 且左括号个数=== 右括号个数
// 左边的第一个是( 右边的最后一个是)
// 中间的部分同样全部吻合上述3个条件
//5.从第一个(开始找满足上面的第4条;从左至右;找到满足的就;后一位继续找;如果一直找不到;你开始从第二(开始找;知道最后
function doneStr(str){
let arr = Array.isArray(str)?str:str.split('')
/**
* 找到第一个(
*/
let num = 0
let findFirst = (arr)=>{
let firstIndex = null
for(let i = 0; i<arr.length;i++){
if(arr[i] === '('){
firstIndex = i
break;
}
}
return firstIndex
}
let startIndex = findFirst(arr)
if(startIndex === null){
console.log('没有满足合法的字符串')
return num
}
/**
* 且左括号个数=== 右括号个数
* 左边的第一个是( 右边的最后一个是)
*/
let secondCheck = (arr,index)=>{
let left = 0;
let right = 0;
let demo = [];
let okDemo = []
for(let i = index;i<arr.length;i++){
demo.push(arr[i])
if(arr[i]==='(') left++;
if(arr[i]===')') right++;
if(left === right && demo[0] ==='(' && demo[demo.length-1]===')'){
//可能满足的str
okDemo.push(demo)
//重新清空条件
left = 0;
right = 0;
demo = []
}
}
return okDemo
}
let secondArr = secondCheck(arr,startIndex)
/**
* 递归处理这些可能的部分
*
*/
let thirdCheck = (arr)=>{
if(arr.length<=0) return num
/**
*一直做到这里 我都混乱 ;;
* 反向我刚开始定的审题根本不对
* 方向错了;
* 不能用正向思维
* 反向思维走起来
*/
for(let i = 0; i <arr.length;i++){
let newArr = arr[i].slice(1,-1)
if(newArr.length === 2 && arr[0] ==='(' && arr[1]=== ')'){
num = num + 2
}else{
num = num + doneStr(arr[i])
}
}
}
thirdCheck(secondArr)
return num
}
后来才知道我真的想复杂了
/**
*找()
*找一个 删一个 ; 知道最后再也找不到
*
*/
function test2(str){
let num = 0
let index = str.indexOf('()')
if(index > -1){
let newStr = str.substring(0,index) + str.substring(index+2)
num= num + 2 + test2(newStr)
}
return num
}
// test2(str)
console.log(test2(str))
到最后也不知道:所有的假设都符合上面的逻辑;有没有少
- 上一篇: 每天一道算法题——最长连续递增序列
- 下一篇: 现代 CSS 解决方案:文字颜色自动适配背景色!
猜你喜欢
- 2025-06-09 平面几何算法:求点到直线和圆的最近点
- 2025-06-09 解决雪花算法生成的ID传到前端后精度丢失问题
- 2025-06-09 什么是非对称加密算法?(什么是非对称加密,有哪些特点)
- 2025-06-09 React18的diff算法(react-diff-view)
- 2025-06-09 「算法题」判断一颗二叉树是否对称
- 2025-06-09 经典监督式学习算法 - 决策树(决策监督制度)
- 2025-06-09 「西瓜哥说算法」从前序与中序遍历序列构造二叉树
- 2024-09-29 每天一道算法题——最长连续递增序列
- 2024-09-29 高级前端开发带你搞懂vue的diff算法
- 2024-09-29 前端知识杂记(diff算法自解) diff算法 react
你 发表评论:
欢迎- 656℃几个Oracle空值处理函数 oracle处理null值的函数
- 646℃Oracle分析函数之Lag和Lead()使用
- 644℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 637℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 632℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 621℃【数据统计分析】详解Oracle分组函数之CUBE
- 617℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 597℃大学生悬浮窗搜题答案神器?分享8个软件和公众号,来对比看看吧
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)