本文主要是介绍【刷题笔记10.28】Leetcode:使括号有效的最少添加,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Leetcode:使括号有效的最少添加
上代码
方法一:使用Deque 双向队列
/*** 方法一:使用Deque 双向队列* @param s* @return*/public int minAddToMakeValid(String s) {//1、将括号字符串转换为char[] 字符数组char[] data = s.toCharArray();//2、使用Deque双端队列:Java中的Deque实现主要有两种:ArrayDeque和LinkedListDeque<Character> result = new ArrayDeque<>();//3、循环遍历字符数组,进行队列顶端元素和当前元素的比较:// (1)如果队列顶端元素是'(' 并且当前遍历的元素为')'则将读队列顶端元素remove// (2)否则,就将遍历到的元素入队列末尾for (char x : data) {if (result.size() != 0 && result.peekLast() == '(' && x == ')') {result.removeLast();} else {result.addLast(x);}}//4、最后,result队列中还剩多少个元素就是使括号有效的最少添加return result.size();}
方法二:找匹配规则,设定两个变量分别记录左、右括号的数量
/*** 方法二:找规律匹配*/public int minAddToMakeValid(String s) {//1、将字符串转换为字符数组char[] data = s.toCharArray();//2、设定两个变量,用于分别记录左右括号的个数int letfCount = 0;int rightCount = 0;//3、遍历字符数组//(1)if 如果是'(' 则leftCount++;//(2)else if 即不是'(' 如果是')', 并且'('的数量大于0 则leftCount--;//(3)else 即不是'('并且leftCount不大于0,则rightCount++for (char x : data) {if (x == '(') {letfCount++;} else if (x == ')' && letfCount > 0) {letfCount--;} else {rightCount++;}}return letfCount + rightCount;}
这篇关于【刷题笔记10.28】Leetcode:使括号有效的最少添加的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!