当前位置: 首页 > news >正文

【算法刷题日志】1044 最长重复子串和75 颜色分类,

颜色分类
在这里插入图片描述
这题就是双指针法,指到1的时候就和p1进行交换,然后p1指针往前移动,指到0的时候就和p0指针进行交换,p0和p1同时往前移动,由于可能出现连续的0后面连续的1,所以为了避免1被交换到末尾,当p1>p0的时候 还需要再和p1在交换一次

class Solution {public void sortColors(int[] nums) {int n = nums.length;int p0=0,p1=0;for(int i=0;i<n;i++){if(nums[i]==1){int temp = nums[i];nums[i]=nums[p1];nums[p1]=temp;++p1;}else if(nums[i]==0){int temp=nums[i];nums[i]=nums[p0];nums[p0]=temp;if(p1>p0){temp = nums[i];nums[i]=nums[p1];nums[p1]=temp;}++p1;++p0;}}}
}

1044. 最长重复子串

在这里插入图片描述

P是一个很大的数 用与计算幂次值,是一个固定的数,通常选择一个质数作为基数。这是因为选择质数作为基数可以减少哈希碰撞的可能性,从而提高哈希函数的效率和准确性。
所以p这个数组的意义就是 相当于一个哈希因子一样,为了减少哈希冲突的可能性,h数组代表的就是比如h【i】 就是长度为i的字符串的哈希值,用字符串哈希来匹配,关键在于如何 check 函数,即实现「检查某个长度 len 作为最大长度,是否存在合法方案」。 check函数就是判断 用set去重,如果set当中有出现过这个字符串,说明这是一个重复子串。
所以这道题就是先计算出p数组 一个幂次值的数组,以及就是字符串的哈希值,然后再用二分查找的方式去找对应子串是否有合法重复子串,然后再不断对比去找出最长的重复子串。

class Solution {long[] h, p;public String longestDupSubstring(String s) {int P = 1313131, n = s.length();h = new long[n + 10]; p = new long[n + 10];p[0] = 1;for (int i = 0; i < n; i++) {p[i + 1] = p[i] * P;h[i + 1] = h[i] * P + s.charAt(i);}String ans = "";int l = 0, r = n;while (l < r) {int mid = l + r + 1 >> 1;String t = check(s, mid);if (t.length() != 0) l = mid;else r = mid - 1;ans = t.length() > ans.length() ? t : ans;}return ans;}String check(String s, int len) {int n = s.length();Set<Long> set = new HashSet<>();for (int i = 1; i + len - 1 <= n; i++) {int j = i + len - 1;long cur = h[j] - h[i - 1] * p[j - i + 1];if (set.contains(cur)) return s.substring(i - 1, j);set.add(cur);}return "";}
}

相关文章:

  • 在Application中如何将集成三方框架初始化
  • c++的类和对象(上)
  • 鸿蒙(API 12 Beta2版)媒体开发【处理音频焦点事件】
  • 【电路笔记】-无源衰减器
  • websocket投送
  • Go语言本机多版本管理
  • 鸿蒙AI功能开发【hiai引擎框架-人脸比对】 基础视觉服务
  • 【OpenCV C++20 学习笔记】霍夫圆形变换-Hough Circle Transform
  • Can‘t import openai in Node
  • 2024 某公司python 面试真题
  • C# Unity 面向对象补全计划 泛型约束
  • 代码随想录算法训练营第三十九天 | 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包理论基础、背包问题总结
  • 到底是低度还是高度的白酒对身体的伤害更大?
  • Linux网络编程3
  • 20240807 每日AI必读资讯
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 30天自制操作系统-2
  • Laravel 菜鸟晋级之路
  • PHP那些事儿
  • Vue2 SSR 的优化之旅
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 关于使用markdown的方法(引自CSDN教程)
  • 规范化安全开发 KOA 手脚架
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 记录一下第一次使用npm
  • 聊聊flink的TableFactory
  • 前端路由实现-history
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ![CDATA[ ]] 是什么东东
  • # linux 中使用 visudo 命令,怎么保存退出?
  • $ git push -u origin master 推送到远程库出错
  • %@ page import=%的用法
  • (6)设计一个TimeMap
  • (C)一些题4
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (论文阅读40-45)图像描述1
  • (七)c52学习之旅-中断
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (一)appium-desktop定位元素原理
  • (自适应手机端)行业协会机构网站模板
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 反射的使用
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net多线程总结
  • .net反混淆脱壳工具de4dot的使用
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .skip() 和 .only() 的使用
  • :not(:first-child)和:not(:last-child)的用法
  • @KafkaListener注解详解(一)| 常用参数详解