佚名通过本文主要向大家介绍了字符串相似度算法,字符串匹配算法,字符串模式匹配算法,字符串加密解密算法,字符串排序算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:求字符串版本号比较算法!
描述:
解决方案1:
描述:
远程版本号: "1.1.1"
本地版本号: "2.0"
字符串保存,大家是怎么比较的呢?
解决方案1:
>>> num = '@"1.1.1"'
>>> num1 = '@"1.1.1"'
>>> def run(s):
return s.strip('@"').split('.')
>>> run(num1)
['1', '1', '1']
>>> run(num2)
['2', '0']
解决方案2:JavaScript 实现. 原理就是按 . 分开, 然后按位比较呗.
/*
字符串比较
返回值:
0: 相等
1: 大于
-1: 小于
*/
function versionCompare( stra, strb ) {
var straArr = stra.split('.');
var strbArr = strb.split('.');
var maxLen = Math.max( straArr.length, strbArr.length );
var result, sa, sb;
for ( var i = 0; i < maxLen; i++ ) {
sa = ~~straArr[i];
sb = ~~strbArr[i];
if(sa > sb){
result = 1;
}
else if(sa < sb){
result = -1;
}
else {
result = 0;
}
if ( result !== 0 ) {
return result;
}
}
return result;
}
解决方案3:我大Python怎么会没有库
In [1]: from distutils.version import LooseVersion
In [2]: LooseVersion('1.0.0')
Out[2]: LooseVersion ('1.0.0')
In [3]: LooseVersion('2.0')
Out[3]: LooseVersion ('2.0')
In [4]: cmp(_2,_3)
Out[4]: -1
In [5]: LooseVersion('1.0b')
Out[5]: LooseVersion ('1.0b')
In [7]: cmp(_2,_5)
Out[7]: -1
解决方案4:也来贴一个Objective-C的:
@implementation NSString(Version)
-(BOOL) isOlderVersionThan:(NSString*)otherVersion
{
return ([self compare:otherVersion options:NSNumericSearch] == NSOrderedAscending);
}
-(BOOL) isNewerVersionThan:(NSString*)otherVersion
{
return ([self compare:otherVersion options:NSNumericSearch] == NSOrderedDescending);
}
@end
这看来是OC最简单的方法了,用NSString的compare方法,不知道有人这样用过没?
解决方案5:首先你自己要有一个比较标准,比如数字升高版本号也偏大的话直接比较字符就好,用
String s1 = "2.2.1";
String s2 = "1.2";
String[] tmp1 = s1.split("\\.");
String[] tmp2 = s2.split("\\.");
然后逐项比较应该也可以吧?不过要注意长度不同类似于2.2和2.2.1的这种比较应该就可以了。
解决方案6:- 利用自然排序算法,对版本号进行升序排序,后面的版本号自然比前面的版本号大
- 利用正则表达式匹配出 majorversion,minorversion,revision_nubmer,然后分别比较
- 将字符串用“.”分割后转化为大小为3的数组,不够的添加0,然后对数组进行比较
SemVer for Objective-C
https://github.com/thisandagain/semver