括号

生成json文件写入本地

匿名 (未验证) 提交于 2019-12-02 23:57:01
public class Json { public static void main ( String [] args ) { String fullPath = null ; //例如:fullPath="D:/myroot/test.json" // 生成json格式文件 try { // 保证创建一个新文件 File file = new File ( "E:\\json" ); if (! file . getParentFile (). exists ()) { // 如果父目录不存在,创建父目录 file . getParentFile (). mkdirs (); } if ( file . exists ()) { // 如果已存在,删除旧文件 file . delete (); } file . createNewFile (); //以下创建json格式内容 //创建一个json对象,相当于一个容器 JSONObject root = new JSONObject (); root . put ( "name" , "张三" ); root . put ( "age" , 20 ); //假设身高是double,我们取小数点后一位 double height = 185.5345 ; root . put ( "height" , ( double ) (

LeetCode 32. 最长有效括号

匿名 (未验证) 提交于 2019-12-02 23:48:02
输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 算法:我们用两个变量分别记录左右括号的长度,先从左到右走一趟,当左括号小于右括号时归零,若中途两者相等,更新括号长度;然后再从右往左走一趟,规则与第一次相反。 class Solution { public: int longestValidParentheses(string s) { int l=0,r=0,res=0; for(int i=0;i<s.size();i++){ if(s[i]=='(')l++; else r++; if(l==r)res=max(res,2*l); else if(r>l)l=r=0; } l=r=0; for(int i=s.size()-1;i>=0;i--){ if(s[i]=='(')l++; else r++; if(l==r)res=max(res,2*l); else if(l>r)l=r=0; } return res; } };

LeetCode.1021-删除最外面的括号(Remove Outermost Parentheses)

匿名 (未验证) 提交于 2019-12-02 23:47:01
这是小川的第 380 次更新,第 408 篇原创 今天介绍的是 LeetCode 算法题中 Easy 级别的第 242 题(顺位题号是 1021 )。有效的括号字符串为空 ("") , "("+ A +")" 或 A + B ,其中A和B是有效的括号字符串,+表示字符串连接。例如, "" , "()" , "(())()" 和 "(()(()))" 都是有效的括号字符串。 如果有效的括号字符串 S 是非空的,并且不存在将其拆分为 S = A + B 的方法,其中A和B是非空有效括号字符串,则它是原始的。 给定有效的括号字符串 S ,考虑其原始分解: S = P_1 + P_2 + ... + P_k ,其中 P_i 是原始有效括号字符串。 在去除 S 的原语分解中的每个原始字符串的最外面的括号后返回 S 。例如: 输入:"(()())(())" 输出:"()()()" 说明: 输入字符串是"(()())(())",带有原语分解 "(()())"+"(())" 。 删除每个部分的外括号后, "()()" + "()" = "()()()" 。 输入:"(()())(())(()(()))" 输出:"()()()()(())" 说明: 输入字符串是 "(()())(())(()(()))" ,带原语分解 "(()())"+"(())"+"(()(( )))" 。 删除每个部分的外括号后

Leetcode 20.有效的括号 js

匿名 (未验证) 提交于 2019-12-02 23:43:01
---恢复内容开始--- 题目描述: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 输入: "()[]{}" 输出: true 输入: "(]" 输出: false 输入: "([)]" 输出: false 输入: "{[]}" 输出: true 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-parentheses /** * @param {string} s * @return {boolean} */ var isValid = function(s) { if(s==''){ return true; } var x=s.split(''); var left=[]; for(let i=0;i<x.length;i++){ if(x[i]=='{'||x[i]=='['||x[i]=='('){ left.push(x[i]); } if(x[i]=='}'){ if(left[left.length-1]=='{'){ left.pop(); }else{ return false; } } if(x[i]==']'){ if(left[left.length-1]=='['){ left.pop(

栈的实际应用

匿名 (未验证) 提交于 2019-12-02 23:41:02
栈的实际应用 栈是一种先进后出的数据结构,这个我相信大家很好理解。那下面我就通过两个栈的实际应用来帮助大家更好的理解栈的工作状态。 数制的转换 参考清华大学出版社《数据结构》中的说明: 十进制数N和其他d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理: N = ( N div d ) * d + N mod d (其中,div为整除运算,mod为求余运算) 例如: ( 1348 ) 10 \ (1348)_{10} ( 1 3 4 8 ) 1 0 = ( 2504 ) 8 \ (2504)_{8} ( 2 5 0 4 ) 8 N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 下面看c代码,这里是顺序栈 # include <stdio.h> # include <stdlib.h> typedef struct stack { int * base ; int * top ; } Stack , * pStack ; Stack s = { 0 } ; //结构体的声明 //栈的初始化 void InitStack ( ) { s . base = ( int * ) malloc ( 100 * sizeof ( int ) ) ; if ( ! s . base ) { printf (

DS_2019_5_12(栈和队列面试题)

匿名 (未验证) 提交于 2019-12-02 23:34:01
我不知道怎样的结局,才能配得上这一路的颠沛流离. 趁着你的能力还能撑得起你的野心,那就只顾着风雨兼程! #include <stdio.h> #include <stdlib.h> #pragma once //1.括号匹配问题 //解题思路: 遍历字符串, 遇到一个字符: a.如果该括号是左括号("([{"), 入栈; b.如果该括号不是左括号, 检查该括号是否匹配与栈顶括号; //确认栈中是否有元素,如果有,用当前括号与栈顶的括号进行比较, //匹配则继续,否则返回flase. bool isValid(char* s){ if (NULL == s){ return true; } Stack st; StackInit(&s); int len = strlen(s); for (int i = 0; i < len; ++i){ //左括号入栈 if ('(' == s[i] || '[' == s[i] || '{' == s[i]){ StackPush(&st, s[i]); } else{ //s[i]为右括号 if (StackEmpty(&st)){ return false; } char ch = StackTop(&st); //检测左右括号是否匹配 if ('(' == ch && ')' == s[i] || '[' == ch && ']' ==

PTA - 括号匹配(一)

匿名 (未验证) 提交于 2019-12-02 23:32:01
括号匹配(一)――堆栈解法 题目:给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。 输入格式: 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。 输出格式: 如果括号配对,输出yes,否则输出no。 输入样例1: sin(10+20) 输出样例1: yes 输入样例2: {[}] 输出样例2: no # include <iostream> # include <string> # include <stack> using namespace std ; // 判断是否为左括号 bool is_left_bracket ( char ch ) { return ch == '(' || ch == '[' || ch == '{' ; } // 判断是否为右括号 bool is_right_bracket ( char ch ) { return ch == ')' || ch == ']' || ch == '}' ; } // 判断左右括号是否匹配 bool is_match ( char left , char right ) { return ( left == '(' && right == ')' ) || ( left == '[' &&

leetcode 20 有效的括号

匿名 (未验证) 提交于 2019-12-02 23:26:52
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 4: 输入: “([)]” 输出: false 示例 5: 输入: “{[]}” 输出: true 分析过程: 检验括号是否匹配的方法用“期待的急迫程度”这个概念来描述。 分析可能出现的不匹配的情况: 1、到来的右括弧非是所“期待”的;[ ( ] ) 2、到来的是“不速之客” ( ( ) ] ) 3、直到结束,也没有到来所“期待”的 ( [ ( ) ) 算法设计思想: 1、凡出现左括弧,则进栈; 2、凡出现右括弧,首先检查栈是否空 若栈空,则表明“右括弧”多了 否则和栈顶元素比较, 若相等,则“左括弧出栈” 否则不匹配 3、表达式检验结束时, 若栈空,则匹配正确 否则表明“左括弧”多了 代码中遇到的问题: peek()方法: 查看栈顶对象而不移除它 java里Stack的peek方法是返回栈顶的元素但不移除它。但Stack的pop方法是会移除的 ToCharArray( )

拙者

◇◆丶佛笑我妖孽 提交于 2019-12-02 23:18:27
题目描述 我们定义一个括号序列是高兴的,当且仅当它右括号的个数不超过左括号的个数。 现在你要维护一个长度为 $n$ 的括号序列,编号为 $1−n$ ,支持以下三种操作: 1 $p$ 表示将第 $p$ 个括号反向,既 $($ 变为 $)$ , $)$ 变为 $($ 。 2 $l$ $r$ 表示询问:如果要使第 $l$ 个括号到第 $r$ 个括号组成的序列的每个前缀都是高兴的,至少需要删去多少个位置上的括号。 3 $l$ $r$ 表示询问:如果要使第 $l$ 个括号到第 $r$ 个括号组成的序列的每个前缀和每个后缀都是高兴的,至少需要删去多少个位置上的括号。 数据范围 $n \le 2 \times 10^5,q \le 3 \times 10^5$ 题解 考虑将 $[l,r]$ 的括号序列拉出,做个前缀和,然后表示成一个函数图象 如果是2操作的话,显然是 $max(-min,0)$ 对于3操作,考虑贪心,将前缀先弄成合法,此时图象会发生偏移,每个点 $i$ 最终变为 $x_i-min(x_j )(j<i)$ 要使得后缀变得合法,则右端点要成为图象的最高点,因此要使前缀合法后的max降至右端点后才合法 因此用线段树维护极差即可 代码 #include <bits/stdc++.h> using namespace std; const int N=3e5+5; int n,a[N],q

括号生成

匿名 (未验证) 提交于 2019-12-02 23:04:42
问题描述 n 有效的 括号组合。 = 3,生成结果为: [ "((()))", "(()())", "(())()", "()(())", "()()()" ] 代码实现 思路:定义两个变量left和right分别表示剩余左右括号的个数。如果在某次递归时,左括号的个数大于右括号的个数,说明此时生成的字符串中右括号的个数大于左括号的个数,即会出现')('这样的非法串,所以这种情况直接返回,不继续处理。如果left和right都为0,则说明此时生成的字符串已有3个左括号和3个右括号,且字符串合法,则存入结果中后返回。如果以上两种情况都不满足,若此时left大于0,则调用递归函数,注意参数的更新,若right大于0,则调用递归函数,同样要更新参数。 代码如下: 1 class Solution { 2 public: 3 vector<string> generateParenthesis(int n) { 4 vector<string> res; 5 generateParenthesisDFS(n, n, "", res); 6 return res; 7 } 8 void generateParenthesisDFS(int left, int right, string out, vector<string> &res) { 9 if (left > right) return