算法通关村第12关【黄金】| 字符串冲刺题

1.最长公共前缀

思路:纵向比较,每个字符串从头挨个比较

class Solution {public String longestCommonPrefix(String[] strs) {StringBuilder sb = new StringBuilder();for(int i = 0;i<strs[0].length();i++){char c = strs[0].charAt(i);for(int j = 1;j<strs.length;j++){if(i >= strs[j].length()|| strs[j].charAt(i)!= c) {return sb.toString();}}sb.append(c);}return sb.toString();}
}

2.压缩字符串

思路:使用StringBuilder

class Solution {public int compress(char[] chars) {if(chars.length == 1){return 1;}int count = 1;StringBuilder sb = new StringBuilder();for(int i = 0;i<chars.length;i++){if(i == chars.length - 1){sb.append(chars[i]);if(count>1){sb.append(count);}break;}if(chars[i] != chars[i+1]){sb.append(chars[i]);if(count>1){sb.append(count);}count = 0;}count++;}char[] cs = new String(sb).toCharArray();int i = 0;for(char c : cs){chars[i] = c;i++;}return sb.length();}
}

双指针

class Solution {public int compress(char[] chars) {if(chars.length == 1){return 1;}int slow = 0;int fast = 0;for(int i = 0;i<chars.length;i++){if(i == chars.length - 1 || chars[i] != chars[i + 1]) {chars[fast++] = chars[i];int num = i - slow + 1;if (num > 1) {int anchor = fast;while (num > 0) {chars[fast++] = (char)(num % 10 + '0');num /= 10;}reverse(chars, anchor,fast - 1);}slow = i + 1;}}return fast;}public void reverse(char[] chars, int left, int right) {while (left < right) {char temp = chars[left];chars[left] = chars[right];chars[right] = temp;left++;right--;}}}

3.表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

数值(按顺序)可以分成以下几个部分:

  1. 若干空格
  2. 一个 小数 或者 整数
  3. (可选)一个 'e' 或 'E' ,后面跟着一个 整数
  4. 若干空格

小数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 下述格式之一:
    1. 至少一位数字,后面跟着一个点 '.'
    2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    3. 一个点 '.' ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 至少一位数字

部分数值列举如下:

  • ["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]

部分非数值列举如下:

  • ["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]

 

class Solution {public boolean isNumber(String s) {if(s == null||s.length() == 0){return false;}char[] str = s.trim().toCharArray();if(str.length == 0){return false;}boolean isDot = false;boolean isE = false;boolean isSign = false;boolean isNum = false;int i = 0;// System.out.print(str.length);for(i = 0;i<str.length;i++){if(str[i]>='0'&&str[i]<='9'){isNum = true;}else if(str[i] == '.'){if(isDot || isE){return false;}isDot = true;isE = false;}else if(str[i] == 'e'||str[i] == 'E'){if(isE || !isNum){return false;}isE = true;isNum = false;isSign = false;}else if(str[i] == '+'||str[i] == '-'){if(i!= 0 && str[i-1] != 'e' && str[i-1] != 'E'){return false;}isSign = true;}else{return false;}}return isNum;}
}

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

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

相关文章

Node.js 文件夹遍历方法:探索优化代码的秘诀

在 Node.js 开发中&#xff0c;经常需要对文件系统进行操作&#xff0c;包括遍历文件夹以获取文件列表。本文将讨论使用 Node.js 遍历文件夹的几种常用方法&#xff0c;并通过一个实际案例来演示如何实现。 基本概念 在开始之前&#xff0c;让我们了解一些基本的概念&#xff…

C/C++浮点数向零舍入 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C浮点数向零舍入 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C浮点数向零舍入 2019年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个单精度浮点数&#…

微服务架构|go-zero 的自适应熔断器

原文链接&#xff1a; go-zero 的自适应熔断器 上篇文章我们介绍了微服务的限流&#xff0c;详细分析了计数器限流和令牌桶限流算法&#xff0c;这篇文章来说说熔断。 熔断和限流还不太一样&#xff0c;限流是控制请求速率&#xff0c;只要还能承受&#xff0c;那么都会处理&…

3D基础:Y-Up和Z-Up

推荐&#xff1a;用 NSDT编辑器快速搭建可编程3D场景 所有 3D 工具都包含具有 X、Y 和 Z 轴的 3 维环境。 这些工具中的 X 轴方向相同&#xff0c;即使用前视图时从左到右的水平线。 但是&#xff0c;不同的 3D 工具可能具有不同的 Y 轴和 Z 轴方向。 有些3D工具是Y-Up的&…

nvm管理多个版本的nodejs

1. 已经安装过nodejs在安装nvm的步骤 1.安装nvmhttps://github.com/coreybutler/nvm-windows/releases 2.nvm安装位置 2.nvm管理的nodejs安装位置 4.最终的安装结构 备注&#xff1a;nodejs安装 2.使用nvm安装管理nodejs 2.1配置下载镜像&#xff1a; 找到nvm安装路径…

Android 网络配置

adb root adb shell 改变网卡网址 ifconfig eth0 192.168.0.167 up 添加虚拟网卡 ifconfig eth0:0 192.168.10.10 up 以上的命令就可以在eth0网卡上创建一个叫eth0:0的虚拟网卡,他的地址是:192.168.10.10 删除虚拟网卡 ifconfig eth0:0 down ip route 查看路由表的内容 …

【操作系统】聊聊Linux内存工作机制

内存主要是用来存储系统和应用程序的指令、数据、缓存等 内存映射 内存是需要安全机制保护的&#xff0c;所以只有内核才可以直接访问物理内存。进程如果要访问内存需要通过独立的虚拟地址空间。 虚拟地址空间其实包含两部分。一部分是内核空间&#xff0c;另一部分就是用户…

kubeadm搭建kubernetes(k8s)

kubeadm搭建kubernetes&#xff08;k8s&#xff09; 一、环境准备1.所有节点&#xff0c;关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换2.修改主机名3.所有节点修改hosts文件4.调整内核参数5.生效参数 二、 安装软件1.所有节点安装docker2.所有节点安装kubea…

go语言基本操作---五

error接口的使用 Go语言引入了一个关于错误处理的标准模式&#xff0c;即error接口&#xff0c;它是Go语言内建的接口类型 type error interface {Error() string }package mainimport ("errors""fmt" )type Student struct {name stringid int }func …

码云使用记录

码云使用记录 主要步骤 1、https://gitee.com 注册 2、下载Git 3、配置SSH 4、创建远程仓库 5、切到本地项目目录下将本地项目推到远程 前两步根据提示进行即可&#xff0c;下面从第三步开始讲解 3、配置SSH&#xff08;用于提交代码和更新代码&#xff09; https://gitee.…

【FusionInsight 迁移】HBase从C50迁移到6.5.1(02)C50上准备FTP Server

【FusionInsight 迁移】HBase从C50迁移到6.5.1(02)C50上准备FTP Server HBase从C50迁移到6.5.1(02)C50上准备FTP Server登录老集群FusionInsight C50的Manager准备FTP User准备FTP ServerHBase从C50迁移到6.5.1(02)C50上准备FTP Server 在FusionInsight HD集群的HBase数…

docker报错解决方法

ERROR: readlink /var/lib/docker/overlay2/l: invalid argument 注意&#xff1a;会清空已有安装 sudo service docker stop sudo rm -rf /var/lib/docker sudo service docker start