基础知识

String StringBuilder 操作

public class StringOperation {
int startIndex;
int endIndex;
{
//初始容量为16个字符 主要做增删查改 索引包头不包尾
StringBuilder sb = new StringBuilder(); sb.append("str");
// 把原来index上的元素挪到新添加的元素位置后
sb.insert(1, "str"); sb.deleteCharAt(1);
sb.delete(1, 2); sb.length();
sb.capacity();
sb.charAt(1);
// 找不到返回-1
sb.indexOf("char");
sb.indexOf("char", 1);
sb.lastIndexOf("str");
sb.lastIndexOf("str", 1);
sb.substring(1);
sb.substring(1,3); sb.setCharAt(1,'c');
sb.reverse(); // String是final的,肯定没有reverse方法
sb.replace(1, 2, "str");
sb.toString(); } {
// 做替换、大小写变换、分割、清除空格、字符数组互换
String str= new String();
String string= new String(); str.trim();
str.toLowerCase();
str.toUpperCase();
str.compareTo(string);
str.split(" ");
str.replace("old", "new");
str.replaceAll("%d","123");
str.substring(startIndex,endIndex);
str.substring(1); List<Character> list = str.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
str.chars().mapToObj(c -> (char) c).forEach(System.out::println);
Collections.frequency(list, 'a'); // 对字符串升序排列
char[] ar = str.toCharArray();
Arrays.sort(ar);
String str11 = String.valueOf(ar); }
}

LeetCode 20. 有效的括号

分析1.0

三种括号,22匹配,遇到左括号入栈,遇到右括号出栈

class Solution {
public boolean isValid(String s) {
HashMap map = new HashMap();
map.put(')','(');
map.put('}','{');
map.put(']','[');
ArrayDeque<Character> stack = new ArrayDeque();
for(int i = 0; i < s.length(); i++){
if(s.charAt(i)==('(') || s.charAt(i)==('{') || s.charAt(i)==('[')){
stack.push(s.charAt(i));
}else if(s.charAt(i)==(')') || s.charAt(i)==('}') || s.charAt(i)==(']')){
if(stack.isEmpty()){
return false;
}else{
if(map.get(s.charAt(i)).equals(stack.pop())){
continue;
}else{
return false;
}
}
}
}
return stack.isEmpty() ? true : false;
}
}

失误

Map、Stack这种容器里存放的都是封装类,比较相等时要使用equals,基本数据类型的比较使用==

return stack.isEmpty() ? true : false; 直接返回stack.isEmpty()就行

LeetCode 1047. 删除字符串中的所有相邻重复项

分析1.0

删除相邻重复项,删除之后索引总长度会改变

失误

我的思路是想再原来的String上操作,但这样是错误的,最后的结果应该是在Stack里头

class Solution {
public String removeDuplicates(String s) {
if(s == null || s.length() < 2){
return s;
}
//StringBuilder sb = new StringBuilder(s);
ArrayDeque<Character> stack = new ArrayDeque();
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(stack.isEmpty()){
stack.push(ch);
continue;
}
if(ch == stack.peek()){
stack.pop();
//sb.deleteCharAt(i); // delete后sb长度改变
}else{
stack.push(ch);
}
}
StringBuilder res = new StringBuilder();
while(!stack.isEmpty()){
res.append(stack.pop());
}
return res.reverse().toString();
}
}

这种拼接还挺有意思的 省了reverse

while (!deque.isEmpty()) {
str = deque.pop() + str;
}

LeetCode 150. 逆波兰表达式求值

分析1.0

逆波兰表达式(后缀表达式)主要有以下两个优点:

去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

思路

① 如何识别算符和数字 ② 延伸 0-9的ascll字符如何比较大小、实现 char 与 int 转换(这种时候可以打印日志 | 判断元素类型)③ 单个字符如何实现String 与 char 转换 charAt() toCharArray()

失误

// char ch = tokens[i].charAt(0); 两位数就完犊子了 数字字符可能有多位,而算符只能是一位

分析2.0

class Solution {
public int evalRPN(String[] tokens) {
ArrayDeque<Integer> stack = new ArrayDeque();
for(int i = 0; i < tokens.length; i++){
// char ch = tokens[i].charAt(0); 两位数就完犊子了
String str = tokens[i];
if(str.equals("+")){
stack.push(stack.pop() + stack.pop());
}else if(str.equals("-")){
stack.push(0 - stack.pop() + stack.pop());
}else if(str.equals("*")){
stack.push(stack.pop() * stack.pop());
}else if(str.equals("/")){
int a = stack.pop();
stack.push(stack.pop() / a);
}else{
stack.push(Integer.parseInt(str));
}
}
return stack.pop();
}
}

总结

  1. Map、Stack这种容器里存放的都是封装类,比较相等时要使用equals,基本数据类型的比较使用==
  2. 22成对出现且涉及查找等相关操作时,注意使用Map或栈
  3. 匹配问题——栈、Map
  4. 栈能保存上一个访问过的元素
  5. String.charAt(i)是一个char 不是一个String
  6. char ch = tokens[i].charAt(0); 两位数就完犊子了 数字字符可能有多位,而算符只能是一位
  7. ASCLL 字符阿拉伯数组的int值 int val = '9' - '0'
  8. Integer.parseInt(s)是把字符串解析成int基本类型,Integer.valueOf(s)是把字符串解析成Integer对象类型。jdk规定,每次要创建一个value值在-128~127之间的Integer对象时,直接从缓存中拿到这个对象,所以value值相同的Integer对象都是对应缓存中同一个对象。-128~127之外的整数值用的不是太频繁,每次创建value值相同的Integer对象时,都是重新创建一个对象

常用变量名增量更新

size、val、ans、cnt、cur、pre、next、left、right、index、gap、tar、res、src、len、start、end、flag、ch

代码随想录算法训练营day11 | leetcode 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值的更多相关文章

  1. LeetCode 1047. 删除字符串中的所有相邻重复项(Remove All Adjacent Duplicates In String)

    1047. 删除字符串中的所有相邻重复项 1047. Remove All Adjacent Duplicates In String 题目描述 LeetCode1047. Remove All Ad ...

  2. 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

    第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...

  3. LeetCode 150. 逆波兰表达式求值(Evaluate Reverse Polish Notation) 24

    150. 逆波兰表达式求值 150. Evaluate Reverse Polish Notation 题目描述 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, /.每个运算对象 ...

  4. LeetCode.1047-重复删除字符串中的所有相邻重复项

    这是小川的第389次更新,第419篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第251题(顺位题号是1047).给定一个小写字母的字符串S,重复删除两个相邻且相等的字母 ...

  5. Leetcode 150.逆波兰表达式求值

    逆波兰表达式求值 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总 ...

  6. Java实现 LeetCode 150 逆波兰表达式求值

    150. 逆波兰表达式求值 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波 ...

  7. leetcode算法学习----逆波兰表达式求值(后缀表达式)

    下面题目是LeetCode算法:逆波兰表达式求值(java实现) 逆波兰表达式即后缀表达式. 题目:  有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式.同 ...

  8. 【python】Leetcode每日一题-逆波兰表达式求值

    [python]Leetcode每日一题-逆波兰表达式求值 [题目描述] 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说 ...

  9. LeetCode:逆波兰表达式求值【150】

    LeetCode:逆波兰表达式求值[150] 题目描述 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除 ...

  10. 逆波兰表达式求值 java实现代码

    根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说 ...

随机推荐

  1. 【实时数仓】Day03-DWM 层业务:各层的设计和常用信息、访客UV计算、跳出明细计算(CEP技术合并数据识别)、订单宽表(双流合并,事实表与维度数据合并)、支付宽表

    一.DWS层与DWM层的设计 1.设计思路 分流到了DWD层,并将数据分别出传入指定的topic 规划需要实时计算的指标,形成主题宽表,作为DWS层 2.需求梳理 DWM 层主要服务 DWS,因为部分 ...

  2. org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException

    1.问题概述 将一个 springboot 项目打成 Jar 包后,在本地使用 java -jar 命令启动服务,服务能启动成功,但是会有如下报错信息. 说明: 配置文件为外置配置文件,与 jar 处 ...

  3. Kubernetes(k8s)存储管理之数据卷volumes(三):NFS数据卷

    目录 一.系统环境 二.前言 三.NFS数据卷 3.1 NFS数据卷概览 3.2 配置NFS服务端以及共享目录 3.3 配置NFS客户端 3.4 创建有NFS卷的pod 一.系统环境 服务器版本 do ...

  4. jmeter Foreach 控制器与json提取器/正则表达式

    适用场景:对某些业务数据依次操作 如:删除某个用户下的所有人员数据,无批量删除接口时,只能循环调用删除人员接口,直到删除完成 返回数据格式: 1.  使用json提取器或正则表达式提取业务数据(jso ...

  5. 关于RESTful 的使用(实战)

    今天在博客园首页看到一篇关于写 RESTful, 大致就是前端定义的一种规范. 原文如下, https://www.cnblogs.com/zhangmumu/p/11936262.html 看了一圈 ...

  6. 网络监测工具之Zabbix的搭建与测试方法(三) ---Zabbix Agent

    安装客户端 在官方网站下载最新版本zabbix agent v6.2.6,然后默认安装,其中配置服务端的界面如下图: 其他一律默认即可. 启用发现功能 如上图所示,开启发现规则,默认搜索zabbix ...

  7. SQLSERVER 的复合索引和包含索引到底有啥区别?

    一:背景 1. 讲故事 在 SQLSERVER 中有非常多的索引,比如:聚集索引,非聚集索引,唯一索引,复合索引,Include索引,交叉索引,连接索引,奇葩索引等等,当索引多了之后很容易傻傻的分不清 ...

  8. CSP/S 2022 游寄

    初赛 HN 初赛分数线好像大 \(32\) 分左右,通过率极高!本人弱弱的拿了 \(60.5\) 分(周围的同学平均分 \(>80\).) Day -1 这一天晚上,我背了背 dijkstra, ...

  9. 突如其来的&amp;quot;中断异常&amp;quot;,我(Java)该如何处理?

    # **一.何为异常?** ## 1.生活中的实例 生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 ....... 2.程序中的实例 我们的代码中也许存在许多纰漏,导 ...

  10. day09-AOP-02

    AOP-02 4.问题提出 在上一篇的MyProxyProvider类中,我们的输出语句功能比较弱,在实际开发中,我们希望是以一个方法的形式,嵌入到真正执行的目标方法前,怎么办? 1.使用土方法解决 ...