剑指Offer --- 字符串篇

剑指Offer — 字符串篇

— 剑指的题解K神已经写的已经非常详细了,并且Github上开源的电子书目前热度也非常高,这个12天12个模块系列就当作自己的秋招刷题汇总了,欢迎大家交流。

剑指 Offer 05. 替换空格

思路

**(线性扫描) ** O(n)

这个题在C++里比较好做,我们可以从前往后枚举原字符串:

  • 1、如果遇到空格,则在string类型的答案中添加 "%20"
  • 2、如果遇到其他字符,则直接将它添加在答案中;

时间复杂度分析: 原字符串只会被遍历常数次,所以总时间复杂度是 O(n).

Java代码

class Solution {public String replaceSpace(String s) {StringBuilder res = new StringBuilder();char[] c = s.toCharArray();for(int i = 0; i < c.length; i ++){if(c[i] == ' ') res.append("%20");else res.append(c[i]);}return res.toString();}
}

剑指 Offer 58 - II. 左旋转字符串

思路

(字符串)

具体过程如下:

  • 1、记录要转移的字符串str
  • 2、记录不转移的字符串res
  • 3、最后返回拼接到字符串res + str

Java代码

class Solution {public String reverseLeftWords(String s, int n) {return s.substring(n, s.length()) + s.substring(0, n);}
}

剑指 Offer 20. 表示数值的字符串

思路
(模拟,字符串处理) O(n)

遍历整个字符串,将所有的不合法情况都去除掉,剩下的就是合法情况。

具体过程如下:

1、首先去除行首和行尾空格,如果去除完之后,整个字符串为空,则返回false

2、行首如果有一个正负号,直接忽略。

3、如果字符串为空或只有一个'.',则不是一个合法方案。
4、遍历整个字符串s,对于当前字符s[i]

  • s[i]为数字,则不做任何处理。

  • s[i] == '.'.的个数加1。如果此时'.''e'后面出现或者'.'的个数多于1个,则返回false。【1e2.11e2.1.1

  • s[i] == 'e' || s[i] == 'E'e的个数加1

    • 如果此时'e'的后面为空或者'e'多于1个或者'e'的前面为空或者为'.e',则返回false。【12e12e3ee1212.e3.e
    • 'e'后面紧跟着正负号,但正负号后面为空,则返回false。【1e2+
  • s[i]为其他字符,返回false

5、排除了各种非法情况,此时s则为合法方案,我们返回true

Java代码

class Solution {public boolean isNumber(String s) {if(s == null || s.length() <= 0){return false;}char[] res = s.trim().toCharArray();if(res.length <= 0) return false;int n = res.length;boolean is_dot = false;boolean is_e_or_E = false;boolean is_num = false;for(int i = 0; i < n; i++){if(res[i] >= '0' && res[i] <= '9'){is_num = true;} else if(res[i] == '.'){//-+ 8.  8.8  .8// 前面:不能有重复的小数点,也不能出现 e/Eif(is_dot || is_e_or_E){return false;}is_dot = true;} else if(res[i] == 'e' || res[i] == 'E'){// 前面必须要有一个数字 || 前面不能出现重复的 e/Eif(is_e_or_E || !is_num){return false;}is_e_or_E = true;is_num =false;//11E+ 11E} else if(res[i] == '-' || res[i] == '+'){if(i!=0 && res[i-1] != 'e' && res[i-1] != 'E'){return false;}} else {return false;}}return is_num;}
}

剑指 Offer 67. 把字符串转换成整数

思路

(模拟) O(n)

先来看看题目的要求:

  • 1、忽略所有行首空格,找到第一个非空格字符,可以是 ‘+/−’表示是正数或者负数,紧随其后找到最长的一串连续数字,将其解析成一个整数。
  • 2、整数后可能有任意非数字字符,请将其忽略。
  • 3、如果整数大于INT_MAX,请返回INT_MAX;如果整数小于INT_MIN,请返回INT_MIN

具体过程:

  • 1、定义k = 0,用k来找到第一个非空字符位置。

  • 2、使用flag记录数字的正负性,false表示正号,true表示负号。

  • 3、使用res来存贮结果,当str[k]为数字字符时进入while循环,执行res = res * 10 +str[k] - '0'

    • 根据flag判断,如果res大于INT_MAX,则返回INT_MAX;如果res * -1小于INT_MIN,则返回INT_MIN
  • 4、计算res

**时间复杂度分析:**字符串长度是 n,每个字符最多遍历一次,所以总时间复杂度是O(n)

Java代码

class Solution {public int strToInt(String str) {int res = 0, bndry = Integer.MAX_VALUE / 10;int i = 0, sign = 1, length = str.length();if(length == 0) return 0;while(str.charAt(i) == ' ')if(++i == length) return 0;if(str.charAt(i) == '-') sign = -1;if(str.charAt(i) == '-' || str.charAt(i) == '+') i++;for(int j = i; j < length; j++) {if(str.charAt(j) < '0' || str.charAt(j) > '9') break;if(res > bndry || res == bndry && str.charAt(j) > '7')return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;res = res * 10 + (str.charAt(j) - '0');}return sign * res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/55659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

登录校验-Filter-详解

目录 执行流程 拦截路径 过滤器链 小结 执行流程 过滤器Filter拦截到请求之后&#xff0c;首先执行方放行之前的逻辑&#xff0c;然后执行放行操作&#xff08;doFilter&#xff09;&#xff0c;然后会访问对应的Web资源&#xff08;对应的Controller类&#xff09;&#…

【图像分类】基于卷积神经网络和主动学习的高光谱图像分类(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Web应用登录验证的几种方式

一、SessionCookie登录 传统的sessioncookie登录是一种有状态 的登录 1、传统的sessioncookie 流程 浏览器登录发送账号和密码&#xff0c;服务端查找数据库验证用户验证成功后&#xff0c;服务端把用户状态&#xff08;登录状态&#xff0c;角色&#xff0c;权限等信息&…

【python】jupyter notebook导出pdf和pdf不显示中文问题

文章目录 写在前面1. 使用jupyter notebook导出pdf1.1 安装Pandoc1.2 安装MiKTex1.3 示例导出pdf 2. 中文显示问题2.1 显示中文问题示例2.2 解决办法1&#xff1a;修改tex2.3 解决办法2&#xff1a;修改内置文件 写在前面 使用jupyter notebook导出pdf时&#xff0c;出现了一些…

31、springboot 配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口

配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口 ★ 设置HTTP服务端口&#xff1a; - server.port或者SERVER_PORT环境变量——总结来说&#xff0c;其实就是要配置server.port外部配置属性。▲ 同样遵守如下优先级&#xff1a; 这些都是外部配置源&#x…

Win 11 电脑的 Win + E 快捷键失效

报的错误信息如下&#xff1a; 该文件没有与之关联的应用来执行该操作。请安装应用&#xff0c;若已经安装应用&#xff0c;请在”默认应用设置"页面中创建关联。 报错原因&#xff1a;系统注册表被改写了导致的出错 解决办法&#xff1a; 1、首先&#xff0c;按键盘上…

python编程环境使用技巧2-python环境迁移

Python环境迁移步骤 将Python环境从一个计算机迁移到另一个计算机可以按照以下步骤进行&#xff1a; 1-备份环境&#xff1a; 在源计算机上&#xff0c;使用pip工具备份当前Python环境的包列表到一个文本文件。在命令行终端中执行以下命令&#xff1a; pip freeze > requi…

【韩顺平 零基础30天学会Java】数组、排序和查找(2days)

数组、排序、查找和多维数组 数组可以存放多个同一类型的数据。数组也是一种数据类 型&#xff0c;是引用数据类型。 定义一个数组 double[] hens {3,5,1,3.4,2,50} 遍历数组得到数组所有元素的和 hens[下标]&#xff0c;下标是从0开始编号的。 可以通过数组名.lenght得到数组…

【数据库】使用ShardingSphere+Mybatis-Plus实现读写分离

书接上回&#xff1a;数据库调优方案中数据库主从复制&#xff0c;如何实现读写分离 ShardingSphere 实现读写分离的方式是通过配置数据源的方式&#xff0c;使得应用程序可以在执行读操作和写操作时分别访问不同的数据库实例。这样可以将读取操作分发到多个从库&#xff08;从…

详细手机代理IP配置

嗨&#xff0c;亲爱的朋友们&#xff01;作为一家代理产品供应商&#xff0c;我知道有很多小伙伴在使用手机进行网络爬虫和数据采集时&#xff0c;常常会遇到一些IP限制的问题。别担心&#xff01;今天我要给大家分享一下手机IP代理的设置方法&#xff0c;让你们轻松应对这些限…

vue2 路由入门

一、单页应用程序介绍 1.概念 单页应用程序&#xff1a;SPA【Single Page Application】是指所有的功能都在一个html页面上实现 2.具体示例 单页应用网站&#xff1a; 网易云音乐 https://music.163.com/ 多页应用网站&#xff1a;京东 https://jd.com/ 3.单页应用 VS 多页…

PostgreSQL命令行工具psql常用命令

1. 概述 通常情况下操作数据库使用图形化客户端工具&#xff0c;在实际工作中&#xff0c;生产环境是不允许直接连接数据库主机&#xff0c;只能在跳板机上登录到Linux服务器才能连接数据库服务器&#xff0c;此时就需要使用到命令行工具。psql是PostgreSQL中的一个命令行交互…

38.HiddenHttpMethodFilter

HiddenHttpMethodFilter 由于浏览器只支持发送get和post方式的请求&#xff0c;SpringMVC 提供了 HiddenHttpMethodFilter 帮助我们将 POST 请求转换为 DELETE 或 PUT 请求 HiddenHttpMethodFilter 处理put和delete请求的条件&#xff1a; 当前请求的请求方式必须为&#xff1…

资料与参考

资料&#xff1a; 本书&#xff08;《Python神经网络编程》&#xff09;的资料是使用Jupyter notebooks写的&#xff0c;本人并不擅长使用Jupyter&#xff0c;所以用传统py重写了一遍&#xff0c;并附加了新功能&#xff08;即多数字识别&#xff09;&#xff0c;现将Jupyter版…

一百六十四、Kettle——Linux上脚本运行kettle的转换任务(Linux本地、Linux资源库)

一、目的 在kettle的转换任务以及共享资源库、Carte服务创建好后&#xff0c;需要对kettle的转换任务用海豚调度器进行调度&#xff0c;调度的前提的写好脚本。所以&#xff0c;这篇博客首先介绍在Linux上脚本运行kettle的转换任务 二、前提准备 &#xff08;一&#xff09;…

【PHP】echo 输出数组报Array to string conversion解决办法

代码&#xff1a; <?PHP echo "Hello World!";$demoName array("kexuexiong","xiong");echo "<pre>";var_dump($demoName);echo $demoName; print_r($demoName);echo "</pre>"; ?>输出结果&#xff1…

解释 RESTful API,以及如何使用它构建 web 应用程序

RESTful API&#xff08;Representational State Transfer Application Programming Interface&#xff09;是一种通过 HTTP 协议进行通信的 Web API&#xff0c;它可以用于构建 Web 应用程序、移动应用程序和其他客户端应用程序。RESTful API 是一种基于 REST 架构风格的 API&…

土豆叶病害识别(图像连续识别和视频识别)

效果视频&#xff1a;土豆叶病害识别&#xff08;Python代码&#xff0c;pyTorch框架&#xff0c;视频识别&#xff09;_哔哩哔哩_bilibili 代码运行要求&#xff1a;Torch库>1.13.1&#xff0c;其它库无版本要求 1..土豆叶数据集主要包好三种类别&#xff08;Early_Blight…

自然语言处理(二):近似训练

近似训练 近似训练&#xff08;Approximate Training&#xff09;是指在机器学习中使用近似的方法来训练模型&#xff0c;以降低计算复杂度或提高训练效率。这种方法通常用于处理大规模数据集或复杂模型&#xff0c;其中精确的训练算法可能过于耗时或计算资源不足。 近似训练…

day14 二叉树01 二叉树的遍历

目录 二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历 二叉树的前序遍历 二叉树遍历可以使用迭代和递归实现&#xff0c;代码如下&#xff1a; 递归法&#xff1a; vector<int> ret; void _preorderTraversal(TreeNode* root) {if (root nullptr) return;ret.pus…