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

字符的统计——423、657、551、696、467、535

423. 从英文中重建数字

最初思路

首先要有一个指针,对于3/4/5为一组地跳跃。起初想的是后瞻性,如果符合0-9任意,则更换index、跳跃。此时写了一个函数,用来判断s的截取段和0-9中有无符合。这个思路并没有进行下去,虽然可行,但满地补丁、没有美感,代码量和耗时耗空间量实在太大了。

顺便一提,除了two和six的ascii码量相同外,其他的都各自不同。也可以通过这个来比较,额外判断一下是two还是six。

    boolean isMatch(String s,String t){int lenS = s.length();int lenT = t.length();if(lenS!=lenT){return false;}else{IntStream S =  s.codePoints().sorted();IntStream T = t.codePoints().sorted();if(S.allMatch((IntPredicate) T)){return true;}else{return false;}}}

解法一、独特标识 

计数每个字母的出现次数。使用唯一标识符来确定每个数字的数量。例如,"z" 只出现在 "zero" 中,所以可以用它来确定 0 的数量。逐步减少每个字母的计数,直到恢复所有的数字。

其余见注释,digitOrder里取出偶数放前面很重要

class Solution {public String originalDigits(String s) {// 数字单词与其唯一标识符String[] digits = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};char[] uniqueChars = {'z', 'o', 'w', 't', 'u', 'f', 'x', 's', 'g', 'i'};int[] digitOrder = {0, 2, 4, 6, 8, 1, 3, 5, 7, 9};//02468是具有唯一标识符的数字,奇数是除去前面后有唯一标识符的数字,所以处理顺序自动去了冗余。这里其实有表驱动思想。int[] charCount = new int[26]; // 记录每个字母的出现次数for (char c : s.toCharArray()) {charCount[c - 'a']++;}int[] digitCount = new int[10];//数字的出现计数for (int i = 0; i < 10; i++) {int digit = digitOrder[I];//判断数字char uniqueChar = uniqueChars[digit];//取特殊符int count = charCount[uniqueChar - 'a'];//count标识出现了几次digitCount[digit] = count;//最后计数for (char c : digits[digit].toCharArray()) {//也是表驱动。对于该单词,出现次数里减掉它的所有。charCount[c - 'a'] -= count;}}StringBuilder result = new StringBuilder();//把数字按升序加进去for (int i = 0; i < 10; i++) {while (digitCount[i]-- > 0) {result.append(i);}}return result.toString();}
}

657. 机器人能否返回原点

解法一、x、y坐标模拟

也就是说要模拟机器人移动。面朝方向无所谓,只需要考虑坐标。但是如果模拟二维数组,空间耗费太大了,它实则只需要考虑x坐标和y坐标。不妨直接设俩坐标,判断改换完在不在原点。

本质上是字符统计问题。即R、L出现的次数一致,U、D出现的次数一致。

class Solution {public boolean judgeCircle(String moves) {int len = moves.length();int x = 0;int y = 0;if(len % 2 == 1){//如果是奇数,那么直接返回。return false;}for(int i = 0; i< len;i++){switch (moves.charAt(i)){case'R':x++;break;case'L':x--;break;case'U':y--;break;case'D':y++;break;}}if(x == 0 && y==0){return true;}else{return false;}}
}

551. 学生出勤记录 I

解法一、遍历按条件求解

只需要考虑A和L的情况,分别是计数和后视两位

class Solution {public boolean checkRecord(String s) {int len = s.length();int countA = 0;//记录缺勤次数for(int i = 0;i < len;i++){if(s.charAt(i) == 'A'){countA++;if(countA >1){return false;}}else if(s.charAt(i) == 'L' && len - i > 2){if(s.charAt(i+1) == 'L' && s.charAt(i+2) == 'L'){return false;}}}return true;}
}

解法二、api战士

A第一次出现的下标与最后一次出现的下标比较,并判断是否含有LLL

class Solution {public boolean checkRecord(String s) {return (s.indexOf('A')==s.lastIndexOf('A')) && (!s.contains("LLL"));}
}


696. 计数二进制子串

解法一、分组统计,取最小值

感觉也是脑筋急转弯题。不像简单的。

如"001110",分组统计为231,取2和3的最小2,取3和1的最小1,2+1=3个最小子串

class Solution {public static int countBinarySubstrings(String s) {int len  = s.length();int count = 1;if(len == 1)return 0;List<Integer> counts = new ArrayList<>();for(int i = 1;i<len;i++){if(i < len &&s.charAt(i-1) == s.charAt(i)){count++;}else{counts.add(count);count = 1;}}counts.add(count);int sum = 0;for (int i = 1; i < counts.size(); i++) {sum += Math.min(counts.get(i - 1), counts.get(i));}return sum;}
}

解法一的优化版本

对于counts[i],我们只需要和上一个进行比较。所以可以优化掉counts

class Solution {public int countBinarySubstrings(String s) {int ptr = 0, n = s.length(), last = 0, ans = 0;while (ptr < n) {char c = s.charAt(ptr);int count = 0;while (ptr < n && s.charAt(ptr) == c) {++ptr;++count;}ans += Math.min(count, last);last = count;}return ans;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/count-binary-substrings/solutions/367704/ji-shu-er-jin-zhi-zi-chuan-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解法二、找"01""10"然后向外扩展

int countBinarySubstrings(string s)
{int i = 0, l = s.size(), sum = 0;while (i < s.size() - 1){if ((s[i] == '0' && s[i + 1] == '1') || (s[i] == '1' && s[i + 1] == '0')){char lov = s[i], hiv = s[i + 1];int lo = i - 1, hi = i + 2;sum++;while (lo >= 0 && hi <= l - 1){if (s[lo] == lov && s[hi] == hiv)sum++;elsebreak;lo--, hi++;}}i++;}return sum;
};

467. 环绕字符串中唯一的子字符串

解法一、动态规划

这个完全没做出来!所以看了题解

感慨一下1或者-25能够这么写好巧妙(a-z是-25,其余是1)

class Solution {public int findSubstringInWraproundString(String p) {int[] dp = new int[26];//26个字母的最大子串数int k = 0;for (int i = 0; i < p.length(); ++i) {if (i > 0 && (p.charAt(i) - p.charAt(i - 1) + 26) % 26 == 1) { // 字符之差为 1 或 -25++k;//计数} else {k = 1;//重置k}dp[p.charAt(i) - 'a'] = Math.max(dp[p.charAt(i) - 'a'], k);//取最大值}return Arrays.stream(dp).sum();//返回求和(也是很巧妙的写法,转为输入流}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/unique-substrings-in-wraparound-string/solutions/1514359/huan-rao-zi-fu-chuan-zhong-wei-yi-de-zi-ndvea/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

535. TinyURL 的加密与解密

解法一、不讲武德

双百通关。本来就是想试试,没想到真可以。假如人与人之间多一点信任。。

public class Codec {// Encodes a URL to a shortened URL.public String encode(String longUrl) {return longUrl;}// Decodes a shortened URL to its original URL.public String decode(String shortUrl) {return shortUrl;}
}

 解法二、哈希表+独特标识

自设一个id

public class Codec {private Map<Integer, String> dataBase = new HashMap<Integer, String>();private int id;public String encode(String longUrl) {id++;dataBase.put(id, longUrl);return "http://tinyurl.com/" + id;}public String decode(String shortUrl) {int p = shortUrl.lastIndexOf('/') + 1;int key = Integer.parseInt(shortUrl.substring(p));return dataBase.get(key);}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/encode-and-decode-tinyurl/solutions/1630074/tinyurl-de-jia-mi-yu-jie-mi-by-leetcode-ty5yp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解法三、哈希生成

将哈希值作为 longUrl 的 key,将键值对 (key,longUrl) 插入数据库 dataBase,然后返回带有 key 的字符串作为 shortUrl。UrlToKey用来避免相同字符串反复哈希冲突的情况

其实相当于对二的id加密。以下是哈希函数

Hash(longUrl)=(∑i=0n−1​longUrl[i]×k1i​)modk2​

public class Codec {static final int K1 = 1117;static final int K2 = 1000000007;//两个合适的质数private Map<Integer, String> dataBase = new HashMap<Integer, String>();
//用来存private Map<String, Integer> urlToKey = new HashMap<String, Integer>();
//public String encode(String longUrl) {if (urlToKey.containsKey(longUrl)) {//如果已经有了,那么return "http://tinyurl.com/" + urlToKey.get(longUrl);}int key = 0;long base = 1;for (int i = 0; i < longUrl.length(); i++) {//哈希函数char c = longUrl.charAt(i);key = (int) ((key + (long) c * base) % K2);base = (base * K1) % K2;}while (dataBase.containsKey(key)) {//如果冲突,则加一key = (key + 1) % K2;}dataBase.put(key, longUrl);//存储urlToKey.put(longUrl, key);//反向存储return "http://tinyurl.com/" + key;}public String decode(String shortUrl) {int p = shortUrl.lastIndexOf('/') + 1;int key = Integer.parseInt(shortUrl.substring(p));return dataBase.get(key);}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/encode-and-decode-tinyurl/solutions/1630074/tinyurl-de-jia-mi-yu-jie-mi-by-leetcode-ty5yp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

碎碎念

  • 几乎每道题都需要简化/找到独特的基准标识。要么独特标识(423),要么分组讨论(696)本质上是遍历→模拟情况、取出需要的信息
  • 学会了Array.stream、一些字符串api的用法,了解到了一点动态规划

昨天挺累的,恰逢周日,就放了一天假,今天写起来果然舒服多了。果然人还是得放过自己jpg每天都能打卡固然很厉害,断了一天后没彻底摆烂也很重要啊!共勉~

六道题写了两小时一刻钟,其中还有不少是看了题解。

相关文章:

字符的统计——423、657、551、696、467、535

423. 从英文中重建数字 最初思路 首先要有一个指针&#xff0c;对于3/4/5为一组地跳跃。起初想的是后瞻性&#xff0c;如果符合0-9任意&#xff0c;则更换index、跳跃。此时写了一个函数&#xff0c;用来判断s的截取段和0-9中有无符合。这个思路并没有进行下去&#xff0c;虽然…...

pytest+allure

安装 下载&#xff1a;github win环境下载zip 环境变量&#xff1a; pycharm&#xff1a; pip install allure-pytest 验证安装 生成结果&#xff1a; if __name__ __main__:pytest.main([-s,test_createTag2.py,--alluredir,result]) 生成报告&#xff1a; allure gener…...

【数据结构】AVL树(平衡二叉搜索树)

文章目录 1.AVL树1.1 AVL树的概念1.2 AVL树节点的定义1.3 AVL树的插入1.4 AVL树的旋转1.4.1 左单旋1.4.2 右单旋1.4.3 右左双旋1.4.4 左右双旋 1.5 AVL树的平衡验证1.6 AVL树的删除1.7 AVL树的性能 1.AVL树 在前面&#xff0c;我们已经介绍过了二叉搜索树&#xff0c;也了解到…...

ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间

前言 在做数据库设计时&#xff0c;为了方便进行数据追踪&#xff0c;通常会有几个字段是每个表都有的&#xff0c;比如创建时间、创建人、更新时间、更新人、备注等&#xff0c;在存储这些时间时&#xff0c;要么存储 WEB 服务器的时间&#xff0c;要么存储数据库服务器的时间…...

【HarmonyOS】应用设置屏幕常亮

【HarmonyOS】应用设置屏幕常亮 一、问题背景&#xff1a; 金融类或钱包场景的应用APP&#xff0c;对于付款码&#xff0c;扫一扫等场景都会对屏幕设置常亮。防止屏幕长时间不操作&#xff0c;自动息屏。 目前这种场景的需求也是非常有必要的&#xff0c;也是行业内默认的处理…...

Docker部署Elasticsearch8.6.0 Kibana8.6.0

&#xff08;1&#xff09;Docker部署Elasticsearch8.5.3&#xff08;失败…&#xff09; 为了匹配springboot3.0.x&#xff0c;安装Elasticsearch:8.5.3 拉取镜像&#xff0c;遇到问题&#xff01; [rootserver01 ~]# docker pull elasticsearch:8.5.3 8.5.3: Pulling from…...

第四篇论文小记

一、第一次投稿 期刊&#xff1a;《Remote Sensing》 研究方向&#xff1a;人工智能应用 投稿结果&#xff1a;已投被拒 投稿周期&#xff1a;3天 最后更新时间&#xff1a;19 July 2024 投稿流程&#xff1a; 状态时间Pending review16 July 2024Reject by editor19 July …...

python使用 tkinter 生成随机颜色

先看效果: 只要不停点击底部的按钮&#xff0c;每次都会生成新的颜色。炫酷啊。 import random import tkinter import tkinter.messagebox from tkinter import Button# todo """ 1. 设置一个按钮&#xff0c;来让用户选择是否显示颜色值 2. 把按钮换成 Label…...

【Linux学习 | 第1篇】Linux介绍+安装

文章目录 Linux1. Linux简介1.1 不同操作系统1.2 Linux系统版本 2. Linux安装2.1 安装方式2.2 网卡设置2.3 安装SSH连接工具2.4 Linux和Windows目录结构对比 Linux 1. Linux简介 1.1 不同操作系统 桌面操作系统 Windows (用户数量最多)MacOS ( 操作体验好&#xff0c;办公人…...

设计模式-抽象工厂

抽象工厂属于创建型模式。 抽象工厂和工厂设计模式的区别&#xff1a; 工厂模式的是设计模式中最简单的一种设计模式&#xff0c;主要设计思想是&#xff0c;分离对象的创建和使用&#xff0c;在Java中&#xff0c;如果需要使用一个对象时&#xff0c;需要new Class()&#xff…...

Ubunton-24.04 简单配置使用

目录 1.设置 root 密码 2. 防火墙设置 1. 安装防火墙 2. 开启和关闭防火墙 3. 开放端口和服务规则 4. 关闭端口和删除服务规则 5 查看防火墙状态 3. 设置网络 1.设置 root 密码 1. 切换到 root 用户&#xff0c;并输入当前登录账号的密码 sudo -i 2. 设置新密码&#xf…...

什么是STP环路保护

在运行生成树协议的网络中&#xff0c;根端口和其他阻塞端口状态是依靠不断接收来自上游设备的BPDU维持。当由于链路拥塞或者单向链路故障导致这些端口收不到来自上游交换设备的BPDU时&#xff0c;设备会重新选择根端口。原先的根端口会转变为指定端口&#xff0c;而原先的阻塞…...

Python算法基础:解锁冒泡排序与选择排序的奥秘

在数据处理和算法设计中&#xff0c;排序是一项基础且重要的操作。本文将介绍两种经典的排序算法&#xff1a;冒泡排序&#xff08;Bubble Sort&#xff09;和选择排序&#xff08;Selection Sort&#xff09;。我们将通过示例代码来演示这两种算法如何对列表进行升序排列。 一…...

QtCMake工程提升类后找不到头文件

链接&#xff1a; QtCMake工程提升类后找不到头文件_qt提升类找不到头文件-CSDN博客 重点&#xff1a; 1.原因&#xff1a;出现问题的原因是Qt creator通过ui文件生成的程序和存放头文件的目录不在一起&#xff0c;但是生成的程序里会在生成目录下找头文件&#xff0c;所以肯…...

Docker核心技术:Docker原理之Cgroups

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Docker核心技术 系列文章&#xff1a;Docker原理之Cgroups&#xff0c;其他文章快捷链接如下&#xff1a; 应用架构演进容器技术要解决哪些问题Docker的基本使用Docker是如何实现的 Docker核心技术&#xff1a;…...

union的特性和大小端

一、union在c和c语言中的特性 1.共享内存空间&#xff1a;union的所有成员共享同一块内存空间。意味着在同一时刻&#xff0c;union 只能存储其成员 中的一个值。当你修改了union中的一个成员&#xff0c;那么其它成员的值也会被改变&#xff0c;因为它们实际上都是指向同一块…...

个性化IT服务探索实践

探索和实践个性化IT服务,可以为用户提供更优质、定制化的解决方案,从而提升用户体验和满意度。以下是一些具体的步骤和建议,帮助自己在未来探索和实践个性化IT服务。 一、了解用户需求 用户调研和反馈: 进行用户调研,了解用户的需求和痛点。收集用户反馈,通过问卷、采访…...

UE4-打包游戏,游戏模式,默认关卡

一.打包游戏 注意windows系统无法打包苹果系统的执行包&#xff0c;只能使用苹果系统打包。 打包完之后是一个.exe文件。 打包要点&#xff1a; 1.确定好要操控的角色和生成位置。 2.设置默认加载的关卡和游戏模式。 在这个界面可以配置游戏的默认地图和游戏的模式&#xff0c;…...

Unity ShaderLab基础

[原文1] [参考2] 一 基础知识 1. 1 着色器语言分类: 语言说明HLSL基于 OpenGL 的 OpenGL Shading LanguageGLSL基于 DirectX 的 High Level Shading LanguageCGNVIDIA 公司的 C for GraphicShader LabUnity封装了CG,HLSL,GLSL的Unity专用着色器语言,具有跨平台,图形化编程,便…...

用代理IP会频繁掉线是什么原因?HTTP和SOCKS5协议优劣势是什么?

在使用代理IP的过程中&#xff0c;频繁掉线是一个常见且令人头痛的问题。要解决这一问题&#xff0c;我们需要先了解其原因&#xff0c;然后比较HTTP和SOCKS5两种代理协议的优劣势&#xff0c;以选择最适合的解决方案。 一、代理IP频繁掉线的原因 1. 代理服务器稳定性 代理服…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...