Сложность: medium
Даны две строки версий, version1 и version2. Сравните их. Строка версии состоит из ревизий, разделенных точками '.'. Значение ревизии — это её целочисленное преобразование с игнорированием ведущих нулей.
Для сравнения строк версий сравнивайте их значения ревизий в порядке слева направо. Если одна из строк версий имеет меньше ревизий, то отсутствующие значения ревизий следует считать равными 0.
Верните следующее:
- Если version1 < version2, верните -1.
- Если version1 > version2, верните 1.
- В противном случае верните 0.
Пример:
Input: version1 = "1.2", version2 = "1.10"
Output: -1
Explanation:
version1's second revision is "2" and version2's second revision is "10": 2 < 10, so version1 < version2.
👨💻 Алгоритм:
1⃣Разделение строк: Разделите обе строки по символу точки на два массива.
2⃣Итерация и сравнение: Итерируйте по самому длинному массиву и сравнивайте элементы по одному. Если один из массивов закончился, предполагайте, что все оставшиеся элементы в другом массиве равны нулю, чтобы продолжить сравнение с более длинной строкой.
3⃣Определение результатов сравнения:
Если два сегмента не равны, верните 1 или -1 в зависимости от того, какой сегмент больше.
Если все сегменты равны после завершения цикла, версии считаются равными. Верните 0
😎 Решение:
class Solution {
function compareVersion($version1, $version2) {
$tokens1 = explode('.', $version1);
$tokens2 = explode('.', $version2);
$length = max(count($tokens1), count($tokens2));
for ($i = 0; $i < $length; $i++) {
$i1 = $i < count($tokens1) ? intval($tokens1[$i]) : 0;
$i2 = $i < count($tokens2) ? intval($tokens2[$i]) : 0;
if ($i1 != $i2) {
return $i1 > $i2 ? 1 : -1;
}
}
return 0;
}
}Ставь 👍 и забирай 📚 Базу знаний