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

news2024/9/24 7:20:51

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.coloradmin.cn/o/986104.html

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

相关文章

Android Framework开发rom实战合集课表/车载车机手机高级系统开发工程必会技能

hi,粉丝朋友&#xff1a; 背景 android framework的初级学习者们&#xff0c;这里大部分是app的开发者想转framework开发&#xff0c;普遍有以下以下几个困惑痛点&#xff1a; 1、不知道framework学了可以干啥&#xff0c;以为学习framework就是看看源码梳理流程而已没有实际…

蠕虫病毒问题

蠕虫病毒处理过程 修改病毒定时时间&#xff0c;今天遇到的是 */30 crontab -e先修改延长时间&#xff0c;会提示无操作权限,执行下面的问题 chattr -l /filepath查看可疑进程&#xff0c;这次遇到的进程有 /tmp/***** /tmp/crontab***** ps -auxkill -9 相关进程 删除/…

举例说明PyTorch函数torch.cat与torch.stack的区别

一、torch.cat与torch.stack的区别 torch.cat用于在给定的维度上连接多个张量&#xff0c;它将这些张量沿着指定维度堆叠在一起。 torch.stack用于在新的维度上堆叠多个张量&#xff0c;它会创建一个新的维度&#xff0c;并将这些张量沿着这个新维度堆叠在一起。 二、torch.…

【算法训练-链表 五】【求和】:链表相加(逆序)、链表相加II(顺序)

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【链表相加】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

K8S详细安装教程以及错误解决方案(包括前置环境,使用部署工具kubeadm来引导集群)

准备工作&#xff08;来自官方文档&#xff09; 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。每台机器 2 GB 或更多的 RAM&#xff08;如果少于这个数字将会影响你应用的运行内存&#xf…

kubeadm 安装k8s

目录 安装k8s 环境准备 所有节点&#xff0c;关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换&#xff08;必须关闭swap分区&#xff09; //修改主机名 //所有节点修改hosts文件 //调整内核参数 所有节点安装docker 所有节点安装kubeadm&#xff0c;kube…

在线考试组卷Word文档导出|废纸篓|支持搜索组员查看练习情况|官网上线

土著刷题微信小程序v1.16&#xff0c;主要是对系统功能的优化&#xff0c;同时迭代开发了反馈热度比较高的【在线考试组卷word文档导出】和废纸篓功能。 下面将逐条介绍一下这一版的新功能和优化点。 在线考试组卷Word文档导出 【组卷Word导出】这个功能对于线下组织考试是个刚…

自动化运维工具Ansible教程(二)【进阶篇】

文章目录 前言Ansible 入门到精通自动化运维工具Ansible教程(一)【入门篇】自动化运维工具Ansible教程(二)【进阶篇】精通篇 进阶篇1. Ansible 的高级主题&#xff08;例如&#xff1a;角色、动态清单、变量管理等&#xff09;**1. 角色&#xff08;Roles&#xff09;**&#x…

linux-进程-execl族函数

exec函数的作用&#xff1a; 我们用fork函数创建新进程后&#xff0c;经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时&#xff0c;该进程被完全替换为新程序。因为调用exec函数并不创建新进程&#xff0c;所以前后进程的ID并没有改变。 简单来说就是&…

看完这篇 教你玩转渗透测试靶机Vulnhub——Momentum:1

Vulnhub靶机Momentum:1渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;漏洞发现&#xff1a;③&#xff1a;漏洞利用&#xff1a;④&#…

《Effective STL》读书笔记(二):vector和string

vector 和 string 优先于动态分配数组 当使用new动态分配内存时&#xff0c;我们需要关注以下内容 必须保证动态分配的内存会被delete&#xff0c;否则会造成资源泄露必须确保使用了正确的delete形式。如果分配了单个对象&#xff0c;则必须使用delete&#xff1b;如果分配了…

选择最适合您的Bug管理软件:市场比较与推荐

“Bug管理软件哪家好&#xff1f;市场上有许多优秀的Bug管理系统品牌如&#xff1a;Zoho Projects、JIRA、Redmine、Bugzilla、MantisBT。” 一款高效的Bug管理系统可以帮助团队更有效地发现、记录和解决软件中的问题&#xff0c;从而提高产品质量和用户满意度。本文将为您介绍…

JavaScript基础07——变量拓展-数组

哈喽&#xff0c;大家好&#xff0c;我是雷工! 每天打卡学习一点点&#xff0c;今天继续学习JavaScript基础知识&#xff0c;以下是学习笔记。 一、数组的基本介绍 数组 &#xff08;Array&#xff09;——一种将一组数据存储在单个变量名下的优雅方式。 数组的作用和变量一样…

【电源专题】典型设备的接地设计

在文章:【电源专题】接地的类型 中我们讲到不同的历史时期接地概念是不同的,有为了安全的电气接地和物理接地,也有为了提供参考电位的接地。 那么在设备接地的设计中,我们会怎么进行操作呢? 在文章【电源专题】接地的类型讲到一个混合接地的例子,我们可以把大功率的地接…

DF竞赛平台化身隐私计算大赛“超强助攻”,助力打造专业人才试炼场!

在技术可用性提升、应用需求增强以及政策大力支持的共同作用下&#xff0c;作为保障数据要素安全可信流通的有效技术手段&#xff0c;隐私计算技术火热发展&#xff0c;应用开始逐渐落地。在此背景下&#xff0c;中国信息通信研究院和中国通信学会联合行业多方力量&#xff0c;…

【MySQL】MySQL的安装,登录,配置和相关命令

文章目录 前言一. 卸载不需要的环境二. 获取MySQL的yum源三. 安装MySQL和启动四. 尝试登录MySQL方法1&#xff1a;获取临时root密码方法2&#xff1a;没有密码方法3&#xff1a;配置文件 五. 简单配置结束语 前言 本篇文章是基于云服务器&#xff1b;Linux&#xff1a;Centos7…

【excel密码】excel文件加密方法总结:

想要给Excel文件进行加密&#xff0c;方法有很多&#xff0c;今天分享三种Excel加密方法给大家。 打开密码 设置了打开密码的excel文件&#xff0c;打开文件就会提示输入密码才能打开excel文件&#xff0c;只有输入了正确的密码才能打开并且编辑文件&#xff0c;如果密码错误…

[A题]2023 年全国大学生数学建模比赛思路、代码更新中.....

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

Java高并发系列: 使用wait - notify实现高效异步方法

1. 背景 在项目开发中, 通常会有异步执行操作, 例如: 提交一个异步清空一系列数据库中ID ${_id} 的记录, 这个时候通常的做法是主线程将任务添加到一个异步队列中, 后台维护一个线程不断地循环扫描这个队列, 如果有需要执行的任务, 则执行相应的逻辑. 如下图所示: 2. 一个简…