解题思路
这是一道字符串处理题目,主要思路如下:
- 使用分隔符'.'将版本号分割成子版本号
- 逐个比较对应位置的子版本号:
- 如果version1的子版本号大,返回1
- 如果version2的子版本号大,返回-1
- 如果相等,继续比较下一组
- 如果其中一个版本号较短:
- version1较短,返回-1
- version2较短,返回1
- 长度相等且所有子版本号都相等,返回0
代码
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string version1, version2;
cin >> version1 >> version2;
// 使用字符串流分割版本号
stringstream ss1(version1), ss2(version2);
string seg1, seg2;
// 逐个比较子版本号
while(getline(ss1, seg1, '.') && getline(ss2, seg2, '.')) {
int v1 = stoi(seg1);
int v2 = stoi(seg2);
if(v1 > v2) {
cout << 1 << endl;
return 0;
}
if(v1 < v2) {
cout << -1 << endl;
return 0;
}
}
// 处理长度不等的情况
if(version1.size() < version2.size()) {
cout << -1 << endl;
}
else if(version1.size() > version2.size()) {
cout << 1 << endl;
}
else {
cout << 0 << endl;
}
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String version1 = sc.next();
String version2 = sc.next();
// 分割版本号
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
// 获取最小长度
int len = Math.min(v1.length, v2.length);
// 逐个比较子版本号
for(int i = 0; i < len; i++) {
int num1 = Integer.parseInt(v1[i]);
int num2 = Integer.parseInt(v2[i]);
if(num1 > num2) {
System.out.println(1);
return;
}
if(num1 < num2) {
System.out.println(-1);
return;
}
}
// 处理长度不等的情况
if(v1.length < v2.length) {
System.out.println(-1);
}
else if(v1.length > v2.length) {
System.out.println(1);
}
else {
System.out.println(0);
}
}
}
def compare_versions(version1, version2):
# 分割版本号
v1 = version1.split('.')
v2 = version2.split('.')
# 获取最小长度
length = min(len(v1), len(v2))
# 逐个比较子版本号
for i in range(length):
num1 = int(v1[i])
num2 = int(v2[i])
if num1 > num2:
return 1
if num1 < num2:
return -1
# 处理长度不等的情况
if len(v1) < len(v2):
return -1
elif len(v1) > len(v2):
return 1
else:
return 0
def main():
# 输入两个版本号
version1, version2 = input().split()
# 输出比较结果
print(compare_versions(version1, version2))
if __name__ == "__main__":
main()
算法及复杂度
- 算法:字符串分割 + 逐位比较
- 时间复杂度:
- 其中
为较长版本号的长度
- 空间复杂度:
- 需要存储分割后的子版本号
注意事项
- 版本号只包含数字和点号
- 子版本号需要转换为整数进行比较
- 需要考虑版本号长度不等的情况