leetcode刷题第21天——1763,117,572
第二十一天
1763 最长的美好子串
当一个字符串s
包含的每一种字母的大写和小写形式 同时 出现在s
中,就称这个字符串 s
是 美好 字符串。比方说,"abABB"
是美好字符串,因为'A'
和 'a'
同时出现了,且 'B'
和'b'
也同时出现了。然而,"abA"
不是美好字符串因为'b'
出现了,而 'B'
没有出现。
给你一个字符串s
,请你返回s
最长的 美好子字符串 。如果有多个答案,请你返回 最早 出现的一个。如果不存在美好子字符串,请你返回一个空字符串。
方法
遍历字符的开始位置,每次从字符串的开始位置往后扫。使用二进制对美好字符串的判断进行优化,定义两个变量lowerCase
和upperCase
,前者用于记录出现的小写字母,后者用于记录出现的大写字母。记录过程使用二进制移位来实现,比如遇到了字符y
,该字符是字母表中的第25
个字符,因此我们将lowerCase
的二进制表示从低到高的第25
位置为1
即可,大写字母同理,这样一来判断一个字符串是否是美好字符串就变成了判断这两个变量的值是否相同即可。
class Solution {public String longestNiceSubstring(String s) {int startPos = 0;int length = 0;for (int start = 0; start < s.length(); ++start){int lowerCase = 0;int upperCase = 0;for (int i = start; i < s.length(); ++i){if (Character.isLowerCase(s.charAt(i))) lowerCase |= 1 << (s.charAt(i) - 'a');else upperCase |= 1 << (s.charAt(i) - 'A');if (lowerCase == upperCase){if (i - start + 1 > length){startPos = start;length = i - start + 1;}}}}return s.substring(startPos, startPos + length);}
}
117 填充每个节点的下一个右侧节点指针 II
给定一个二叉树
struct Node {int val;Node *left;Node *right;Node *next;
}
填充它的每个 next
指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next
指针设置为 NULL
。
初始状态下,所有next
指针都被设置为NULL
。
进阶:
- 你只能使用常量级额外空间。
- 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
方法
将二叉树的每一层看作是一个链表,如果过已经直到了上层的链表,那么很容易通过树结构得到下层的链表中的所有节点,将这些节点全部连接起来即可。
class Solution {public Node connect(Node root) {if (root == null) return root;Node head = root;while (head != null){Node p = head;Node pre = null;while (p != null){if (p.left != null && p.right != null){if (pre != null) pre.next = p.left; p.left.next = p.right;pre = p.right;}else if (p.left != null) {if (pre != null) pre.next = p.left;pre = p.left;}else if (p.right != null) {if (pre != null) pre.next = p.right;pre = p.right;}p = p.next;}while (head != null){if (head.left != null){head = head.left;break;}else if (head.right != null){head = head.right;break;}head = head.next;}}return root;}
}
572 另一颗子树
给你两棵二叉树root
和 subRoot
。检验 root
中是否包含和 subRoot
具有相同结构和节点值的子树。如果存在,返回true
;否则,返回 false
。
二叉树 tree
的一棵子树包括 tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
方法 Hash散列方法
为每一棵二叉树生成一个唯一的hash
值,使用hash
值比较两个树相等,如果不相等,递归的去访问左右子树是否和要求的子树是否相等。
class Solution {public static int subHash;public static int getHash(TreeNode root, int layer){int res = 0;if (root != null){int val = root.val;if (val == 0) val = 11;res += val * layer * 154 + getHash(root.left, layer + 11) + getHash(root.right, layer + 1001);}return res;}public boolean isSubtree(TreeNode root, TreeNode subRoot) {subHash = getHash(subRoot, 1);return judge(root);}public boolean judge(TreeNode root) {if (root == null) return false;if (getHash(root, 1) == subHash) return true;return judge(root.left) || judge(root.right);}
}
leetcode刷题第21天——1763,117,572相关推荐
- 【leetcode刷题】21.三数之和——Java版
⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 一题二写,三数之和,题解四瞅五瞄六瞧,水平还七上八下九流,十分辣鸡. --leetcode此题热评 前言 哈喽,大家好,我是一条. ...
- LeetCode刷题(21)
Wildcard Matching ?匹配单字符 * 匹配任意字符串 采用DP算法,做这类匹配问题 class Solution(object):def isMatch(self, s, p):&qu ...
- LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)
LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...
- C#LeetCode刷题-树
树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历 61.6% 中等 95 不同的二叉搜索树 II 43.4% 中等 96 不同的二叉搜索树 51.6% 中等 98 验证二叉搜索树 22.2% ...
- 一个算法笨蛋的12月leetCode刷题日记
类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...
- LeetCode刷题Python实录
使用Python的LeetCode刷题 前言 题目 1408. 数组中的字符串匹配 508. 出现次数最多的子树元素和 1089. 复写零 剑指 Offer 14- I. 剪绳子 1175. 质数排列 ...
- 面试算法LeetCode刷题班—BAT面试官带你刷真题、过笔试
课程名称: <面试算法LeetCode刷题班> --BAT面试官带你刷真题.过笔试 主讲老师: 林老师 BAT资深研发工程师(T7/P8级),致力于搜索引擎及其子系统的研发.迭代与优化,数 ...
- C#LeetCode刷题-程序员面试金典
本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...
- C#LeetCode刷题-剑指Offer
本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-剑指Offer | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode剑指Offer ...
最新文章
- Sqoop的基础应用
- 带你进入String类的易错点和底层本质分析!
- ServiceStack.Redis的问题与修正
- qt 利用 HTML 生成PDF文档,不能显示jpg图片
- boost::successive_shortest_path_nonnegative_weights用法的测试程序
- 列一下OOP规约,编程的时候共勉!别踏坑!
- 序列化 - 实现ISerializable
- Linux版本Oracle工具,Linux下oracle可视化操作工具sqldeveloper安装与配置
- linux 永久添加路由表,Linux 添加永久静态路由的方法
- Javascript经典窍门
- dopod566使用小参考
- 解决WPS文档不加载金格office360签章的问题
- 如何用淘宝客为淘宝店铺引流
- 什么是软件测试吞吐量,在软件测试中吞吐量与TPS有什么区别与联系
- Java 大文件分片上传
- Android API升级到30遇到的问题
- 怎样在表格中选出同一类_excel表格怎么将相同内容筛选出来
- BI_开发_问题:ORA-26002: Table DWH.W_XACT_TYPE_D has index defined upon it.
- 苹果开发者账号可以创建多少测试证书_苹果开发者账号对应生成的证书都有哪些...
- VMware安装Ubuntu Kylin系统
热门文章
- 星号下三角形python答案_Python利用for循环打印星号三角形的案例
- MobaXterm全能终端神器(下载安装使用教程)
- Cesium专栏-空间分析之剖面分析(附源码下载)
- Android项目实战--【谁是歌手-逻辑实现篇】
- 如何在Ubuntu系统下使用扫描仪(by quqi99)
- Dijkstra最优路径的算法
- 【小程序“600002“】现象:小程序测试版能正常的进行页面跳转,正式版不能进行页面跳转
- 7080mt安装linux网卡驱动,Intel英特尔PRO100/1000/10GbE系列网卡驱动
- 基于UML的软件开发过程
- word中间空白页删除技巧