Рубрики

Найдите время, которое является палиндромным и наступает по истечении заданного времени

Дана строка str, которая хранит время в 24-часовом формате в формате ЧЧ: ММ , так что 0 ≤ ЧЧ ≤ 23 и 0 ≤ ММ ≤ 59 . Задача состоит в том, чтобы найти следующий ближайший момент времени, который является палиндромом при чтении в виде строки. Если такой строки не существует, выведите -1 .

Примеры:

Input: str = “21:12”
Output: 22:22
The only palindromic time possible in the given hour is 21:12
but it is not greater than the given time so the output will be
the palindromic time in the next hour i.e. 22:22

Input: str = “23:32”
Output: -1

Подход: Есть три возможных случая:

  1. Если MM <обратный (ЧЧ), то выходной сигнал будет ЧЧ в виде часов, а обратный (ЧЧ) в минутах.
  2. Если ЧЧ = 23 и MM ≥ 32, выходной сигнал будет равен -1 .
  3. В противном случае выходной сигнал будет HH + 1 в виде часов, а обратный (HH + 1) — в минутах.

Ниже приведена реализация вышеуказанного подхода:

C ++

// C ++ реализация подхода
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

  
// Функция для возврата необходимого времени

string getTime(string s, int n)

{

    // Для сохранения полученного времени

    string res;

  

    // Часы хранятся в h как целое число

    int h = stoi(s.substr(0, 2));

  

    // минуты хранятся в м как целое число

    int m = stoi(s.substr(3, 2));

  

    // Обратный ход h

    int rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10;

  

    // Обратная h как строка

    string rev_hs = to_string(rev_h);

  

    if (h == 23 && m >= 32) {

        res = "-1";

    }

  

    // Если MM <обратная сторона (ЧЧ)

    else if (m < rev_h) {

        string temp;

  

        // 0 добавляется, если ЧЧ <10

        if (h < 10)

            temp = "0";

        temp = temp + to_string(h);

  

        // 0 добавляется, если rev_h <10

        if (rev_h < 10)

            res = res + temp + ":0" + rev_hs;

        else

            res = res + temp + ":" + rev_hs;

    }

    else {

  

        // Инкремент часов

        h++;

  

        // Реверс часа после увеличения 1

        rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10;

        rev_hs = to_string(rev_h);

  

        string temp;

  

        // 0 добавляется, если ЧЧ <10

        if (h < 10)

            temp = "0";

        temp = temp + to_string(h);

  

        // 0 добавляется, если rev_h <10

        if (rev_h < 10)

            res = res + temp + ":0" + rev_hs;

        else

            res = res + temp + ":" + rev_hs;

    }

    return res;

}

  
// Код драйвера

int main()

{

    string s = "21:12";

    int n = s.length();

  

    cout << getTime(s, n);

  

    return 0;

}

Джава

// Java реализация подхода

import java.util.*;

  

class GFG 

{

  

    // Функция для возврата необходимого времени

    static String getTime(String s, int n) 

    {

  

        // Для сохранения полученного времени

        String res = "";

  

        // Часы хранятся в h как целое число

        int h = Integer.parseInt(s.substring(0, 0 + 2));

  

        // минуты хранятся в м как целое число

        int m = Integer.parseInt(s.substring(3, 3 + 2));

  

        // Обратный ход h

        int rev_h = (h % 10) * 10

                   ((h % 100) - (h % 10)) / 10;

  

        // Обратная h как строка

        String rev_hs = Integer.toString(rev_h);

        if (h == 23 && m >= 32)

        {

            res = "-1";

        }

          

        // Если MM <обратная сторона (ЧЧ)

        else if (m < rev_h)

        {

            String temp = "";

  

            // 0 добавляется, если ЧЧ <10

            if (h < 10)

                temp = "0";

            temp = temp + Integer.toString(h);

  

            // 0 добавляется, если rev_h <10

            if (rev_h < 10)

                res = res + temp + ":0" + rev_hs;

            else

                res = res + temp + ":" + rev_hs;

        

        else

        {

  

            // Инкремент часов

            h++;

  

            // Реверс часа после увеличения 1

            rev_h = (h % 10) * 10 + ((h % 100) - 

                    (h % 10)) / 10;

            rev_hs = Integer.toString(rev_h);

  

            String temp = "";

  

            // 0 добавляется, если ЧЧ <10

            if (h < 10)

                temp = "0";

            temp = temp + Integer.toString(h);

  

            // 0 добавляется, если rev_h <10

            if (rev_h < 10)

                res = res + temp + ":0" + rev_hs;

            else

                res = res + temp + ":" + rev_hs;

        }

        return res;

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        String s = "21:12";

        int n = s.length();

        System.out.println(getTime(s, n));

    }

}

  
// Этот код предоставлен
// sanjeev2552

python3

# Python3 реализация подхода

  
# Функция для возврата необходимого времени

def getTime(s, n) : 

  

    # Часы хранятся в h как целое число

    h = int(s[0 : 2]); 

  

    # Минуты хранятся в м как целое число

    m = int(s[3 : 5]); 

  

    # Обратная ч

    rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) // 10

  

    # Обратное значение h в виде строки

    rev_hs = str(rev_h)

      

    temp = ""

    res  = ""

      

    if (h == 23 and m >= 32) :

        res = "-1"

      

  

    # Если ММ <обратная сторона (ЧЧ)

    elif (m < rev_h) : 

  

        # 0 добавляется, если ЧЧ <10

        if (h < 10) :

            temp = "0"

              

        temp = temp + str(h); 

  

        # 0 добавляется, если rev_h <10

        if (rev_h < 10) :

            res = res + temp + ":0" + rev_hs; 

        else :

            res = res + temp + ":" + rev_hs; 

      

    else :

          

        # Инкремент часов

        h += 1

  

        # Реверс часа после увеличения на 1

        rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) //10

          

        rev_hs = str(rev_h); 

  

        # 0 добавляется, если ЧЧ <10

        if (h < 10) :

            temp = "0"

              

        temp = temp + str(h); 

  

        # 0 добавляется, если rev_h <10

        if (rev_h < 10) :

            res = res + temp + ":0" + rev_hs; 

        else :

            res = res + temp + ":" + rev_hs; 

      

    return res; 

  

  
# Код драйвера

if __name__ == "__main__"

  

    s = "21:12"

    n = len(s); 

  

    print(getTime(s, n)); 

  

    # Этот код предоставлен AnkitRai01

PHP

<?php

  
// PHP реализация подхода

   
// Функция для возврата необходимого времени

function getTime( $s, $n)

{

    // Для сохранения полученного времени

    $res="";

   

    // Часы хранятся в h как целое число

    $h = intval($s.substr(0, 2));

   

    // минуты хранятся в м как целое число

    $m = intval($s.substr(3, 2));

   

    // Обратный ход h

    $rev_h = ($h % 10) * 10 + (($h % 100) - ($h % 10)) / 10;

   

    // Обратная h как строка

    $rev_hs = strval($rev_h);

   

    if ($h == 23 && $m >= 32) {

        $res = "-1";

    }

   

    // Если MM <обратная сторона (ЧЧ)

    else if ($m < $rev_h) {

        $temp="";

   

        // 0 добавляется, если ЧЧ <10

        if ($h < 10)

            $temp = "0";

        $temp = $temp . strval($h);

   

        // 0 добавляется, если rev_h <10

        if ($rev_h < 10)

            $res = $res . $temp . ":0" . $rev_hs;

        else

            $res = $res. $temp .":" . $rev_hs;

    }

    else {

   

        // Инкремент часов

        $h++;

   

        // Реверс часа после увеличения 1

        $rev_h = ($h % 10) * 10 + (($h % 100) - ($h % 10)) / 10;

        $rev_hs = strval($rev_h);

   

        $temp="";

   

        // 0 добавляется, если ЧЧ <10

        if ($h < 10)

            $temp = "0";

        $temp = $temp . strval($h);

   

        // 0 добавляется, если rev_h <10

        if ($rev_h < 10)

            $res = $res . $temp . ":0" . $rev_hs;

        else

            $res = $res . $temp . ":" . $rev_hs;

    }

    return $res;

}

   
// Код драйвера

  

    $s = "21:12";

    $n = strlen($s);

   

    echo getTime($s, $n);

   

    return 0;

  
// Этот код предоставлен ChitraNayal
?>

Выход:

22:22

Рекомендуемые посты:

Найдите время, которое является палиндромным и наступает по истечении заданного времени

0.00 (0%) 0 votes