Mündəricat
Problem bəyanat
Tarixi Yenidən Formatlaşdırın LeetCode Həlli – a date
şəklində simli Day Month Year
, harada:
Day
komplektdə var{"1st", "2nd", "3rd", "4th", ..., "30th", "31st"}
.Month
komplektdə var{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
.Year
üçündür[1900, 2100]
.
Tarix sətirini formata çevirin YYYY-MM-DD
, harada:
YYYY
4 rəqəmli ili bildirir.MM
2 rəqəmli ayı ifadə edir.DD
2 rəqəmli günü bildirir.
misal
Test işi 1:
Input:
tarix = "20 oktyabr 2052"
Çıxış:
“2052-10-20”
Test işi 2:
Input:
tarix = "26 may 1960"
Çıxış:
“1960-05-26”
Yanaşma:
Boşluğa bölməklə asanlıqla çıxara biləcəyimiz 3 hissə var:
- İl: artıq istədiyimiz formatda.
- Ay: tərcüməyə ehtiyacı var sim ədədi təmsilə. a istifadə edə bilərik
Map
ki,. - Gün: bəziləri ilə qarışıqdır şəkilçilər (məs
st
,nd
). Biz sadəcə istifadə edənləri silə bilərikparseInt
.
Bu, son nəticədir.
Ah, biz də əlavə etməliyik sıfır dolgu. Belə bir günümüz varsa 1
, olmasını istəyirik 01
.
Aşağıda addımlar var:
- İlk iki hərfdən yalnız rəqəmləri götürün, əgər bu bir hərfdirsə, 0 əlavə edin. Maksimum O(2) işləmə müddətində
- Ay nömrəsini almaq üçün O(1).
- İlin bütün son 4 rəqəmi.
- Bütün bunları sıra ilə əlavə edin və geri qaytarın.
Yenidən Format Tarixi Kodu
C ++ Proqramı
class Solution { public: string reformatDate(string date) { string res; if(date.length()==13) res=date.substr(9,4)+'-'+ret(date.substr(5,3))+'-'+date.substr(0,2); else res=date.substr(8,4)+'-'+ret(date.substr(4,3))+'-'+'0'+date.substr(0,1); return res; } string ret(string s){ if(s=="Jan") return "01"; else if(s=="Feb") return "02"; else if(s=="Mar") return "03"; else if(s=="Apr") return "04"; else if(s=="May") return "05"; else if(s=="Jun") return "06"; else if(s=="Jul") return "07"; else if(s=="Aug") return "08"; else if(s=="Sep") return "09"; else if(s=="Oct") return "10"; else if(s=="Nov") return "11"; else return "12"; } };
Java Proqramı
class Solution { private static final Map<String, String> months = getMonths(); public String reformatDate(String date) { String[] ss = date.split("\\s+"); StringBuilder sb = new StringBuilder(); sb.append(ss[2]).append("-"); sb.append(months.get(ss[1])).append("-"); sb.append(ss[0].length() == 3 ? ("0" + ss[0].substring(0, 1)) : ss[0].substring(0, 2)); return sb.toString(); } private static Map<String, String> getMonths(){ Map<String, String> months = new HashMap<>(); months.put("Jan", "01"); months.put("Feb", "02"); months.put("Mar", "03"); months.put("Apr", "04"); months.put("May", "05"); months.put("Jun", "06"); months.put("Jul", "07"); months.put("Aug", "08"); months.put("Sep", "09"); months.put("Oct", "10"); months.put("Nov", "11"); months.put("Dec", "12"); return months; } }
Yenidən Format Tarixi LeetCode Həlli üçün Mürəkkəblik Təhlili
Zamanın mürəkkəbliyi: O(1), çünki biz sabit vaxtdan istifadə edirik.
Kosmik Mürəkkəblik: O(1), çünki biz sabit boşluqdan istifadə edirik.