leetcode 165. 比较版本号-java实现

news/2024/10/17 20:34:25/

题目所属分类

模拟就可以了

原题链接

给你两个版本号 version1 和 version2 ,请你比较它们。

版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。

比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 0 和 1 ,0 < 1 。

返回规则如下:

如果 version1 > version2 返回 1,
如果 version1 < version2 返回 -1,
除此之外返回 0。

代码案例:输入:version1 = “1.01”, version2 = “1.001”
输出:0
解释:忽略前导零,“01” 和 “001” 都表示相同的整数 “1”
示例 2:
输入:version1 = “1.0”, version2 = “1.0.0”
输出:0
解释:version1 没有指定下标为 2 的修订号,即视为 “0”
示例 3:
输入:version1 = “0.1”, version2 = “1.1”
输出:-1
解释:version1 中下标为 0 的修订号是 “0”,version2 中下标为 0 的修订号是 “1” 。0 < 1,所以 version1 < version2

题解

比较s1和s2,枚举相同等级的版本号,假设枚举到某一个相同等级,i是当前s1字符串的当前等级的开头,x - 1是结尾;j是当前s2字符串的当前等级的开头,y - 1是结尾,因此s1的[i,x - 1]和s2的[j, y - 1] 是两个字符串等级相同的版本号,转换为字符串比较即可
至于x = i y ==j 这种情况就是不存在的 就是那时候s1是null 不存在的情况默认为0了

class Solution {public int compareVersion(String s1, String s2) {int i = 0 , j = 0 ;while(i < s1.length() || j < s2.length()){int x = i , y = j ;while(x < s1.length() && s1.charAt(x) != '.') x++;while(y < s2.length() && s2.charAt(y) != '.') y++;int a = x == i ? 0 : Integer.parseInt(s1.substring(i,x));int b = y == j ? 0 : Integer.parseInt(s2.substring(j,y));if(a > b) return 1 ;if(a < b) return -1 ;i = x + 1 ;j = y + 1;}return 0;}
}

http://www.ppmy.cn/news/248356.html

相关文章

基于HAL库的STM32的单定时器的多路输入捕获测量脉冲频率(外部时钟实现)

目录 写在前面 一般的做法&#xff08;定时器单通道输入捕获) 以外部时钟的方式(高低频都适用) 测试效果 写在前面 STM32的定时器本身有输入捕获的功能。可选择双端捕获&#xff0c;上升沿捕获或者是下降沿捕获。对应捕获频率来说,连续捕获上升沿或下降沿的时间间隔就是其脉…

编译LineageOS-20并输入Pixel 2XL

编译LineageOS-20并输入Pixel 2XL 2023-6-6 hongxi.zhu 目录 编译LineageOS-20并输入Pixel 2XL一、编译LineageOS-201. 准备工作1.1 安装platform-tools1.2 安装必要的依赖1.3 创建相关目录1.4 下载repo可执行文件1.5 配置 2. 拉取源码2.1 初始化仓库2.2 同步源码 3. 编译源码3…

【算法】--- 几分钟了解直接选择排序(排序中最简单的排序)+快排(解决一切的优质算法)(中)

文章目录 前言&#x1f31f;一、常见的排序算法&#xff1a;&#x1f31f;二、选择排序---直接选择排序&#xff1a;&#x1f30f;2.1.1 基本思想&#xff1a;&#x1f30f;2.1.2 直接选择排序:&#x1f30f;2.1.3 直接选择排序的特性总结&#xff1a;&#x1f30f;2.1.4 思路&…

SpringBoot+MyBatisplus搭建校园新闻平台——已开源

概述 开发背景 校园新闻平台是以新闻宣传机构的在线信息发布需求为基础&#xff0c;随着数字化和信息化的快速发展&#xff0c;校园新闻在校园内的传播和沟通中变得越来越重要。学校需要一个有效的管理系统来整合、发布和传播校园新闻&#xff0c;以满足师生、校友和其他利益…

Java的引用

一、概述 其实java有4种引用&#xff0c;4种可分为强、软、弱、虚。我们将从这四个方面入手进行介绍。 二、强引用 首先看到我们有一个类叫M&#xff0c;在这个类里我重写了一个方法叫finalize()&#xff0c;我们可以看到这个方法是已经被废弃的方法&#xff0c;为什么要重写…

北大教授一年时间制作的Java300集课程,我免费分享给你~

Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象理论&#xff0…

达内java面试题集_达内java面试题

JAVA面试题-COREJAVA部分1&#xff0e;在main(String[] args)方法内是否可以调用一个非静态方法&#xff1f;答案&#xff1a;不能2&#xff0e;同一个文件里是否可以有两个public类&#xff1f;答案&#xff1a;不能3&#xff0e;方法名是否可以与构造器的名字相同&#xff1f…

java cef 崩溃,xCrash异常补抓分析-Java奔溃

近来看了一些异常补抓相关资料&#xff0c;正好补一下相应的操作&#xff0c;发现爱奇艺的一个Xcrash的异常补抓框架 文章分为三部分&#xff0c;分别是Java奔溃&#xff0c;卡顿补抓&#xff0c;以及Native崩溃。 可以看一下基本架构的全貌 这一节是Java崩溃的说明 基本初始化…