leetcode 165. バージョン番号の比較 - Java 実装

トピックのカテゴリ

シミュレーションは大丈夫です

元のタイトルへのリンク

version1 と version2 の 2 つのバージョン番号を与えて、比較してください。

バージョン番号は、「.」で結合された 1 つ以上のリビジョン番号で構成されます。各リビジョン番号は複数の数字で構成され、先頭にゼロが含まれる場合があります。各バージョン番号には少なくとも 1 文字が含まれます。リビジョン番号は左から右に番号が付けられ、添字は 0 から始まり、左端のリビジョン番号には添字 0、次のリビジョン番号には添字 1 が付けられます。たとえば、2.5.33 と 0.1 は有効なバージョン番号です。

バージョン番号を比較する場合は、リビジョン番号を左から右に順番に比較します。リビジョン番号を比較する場合は、先頭のゼロを無視して単純に整数値を比較します。つまり、リビジョン 1 とリビジョン 001 は同じです。バージョン番号の添え字にリビジョン番号が指定されていない場合、リビジョン番号は 0 として扱われます。たとえば、バージョン 1.0 はバージョン 1.1 よりも小さくなります。これは、下付き文字 0 のリビジョン番号が同じであり、下付き文字 1 のリビジョン番号がそれぞれ 0 と 1 (0 < 1) であるためです。

返品ルールは以下の通りです。

バージョン 1 > バージョン 2 の場合は 1、
バージョン 1 < バージョン 2 の場合は -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 なので、バージョン 1 < バージョン 2

答え

s1 と s2 を比較し、同じレベルのバージョン番号を列挙します。列挙が特定のレベルに達すると仮定します。i は現在の s1 文字列の現在のレベルの始まり、x - 1 は終わり、j は文字列の現在のレベルです。現在の s2 文字列 先頭は y - 1 で終わりなので、s1 の [i, x - 1] と s2 の [j, y - 1] は 2 つの文字列の同じレベルのバージョン番号であり、変換できます。 x =
iy ==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;
    }
}

おすすめ

転載: blog.csdn.net/qq_41810415/article/details/131077866