1507. Reformat Date

Easy

Given a date string in the form Day Month Year, where:

  • Day is in the set {"1st", "2nd", "3rd", "4th", ..., "30th", "31st"}.

  • Month is in the set {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}.

  • Year is in the range [1900, 2100].

Convert the date string to the format YYYY-MM-DD, where:

  • YYYY denotes the 4 digit year.

  • MM denotes the 2 digit month.

  • DD denotes the 2 digit day.

Example 1:

Input: date = "20th Oct 2052"
Output:
 "2052-10-20"

Example 2:

Input: date = "6th Jun 1933"
Output:
 "1933-06-06"

Example 3:

Input: date = "26th May 1960"
Output:
 "1960-05-26"

Constraints:

  • The given dates are guaranteed to be valid, so no error handling is necessary.

解題

醜陋但是跑得快的解法:

Runtime: 0 ms, faster than 100.00%

Memory Usage: 2.1 MB, less than 38.71%

func reformatDate(date string) string {
    d := strings.Fields(date)
    ans := make([]byte, 0)
    
    month := map[string]string{
        "Jan": "01",
        "Feb": "02",
        "Mar": "03",
        "Apr": "04",
        "May": "05",
        "Jun": "06",
        "Jul": "07",
        "Aug": "08",
        "Sep": "09",
        "Oct": "10",
        "Nov": "11",
        "Dec": "12",
    }
    
    for i:=0; i<len(d[2]); i++ {
        ans = append(ans, d[2][i])
    }
    
    ans = append(ans, '-')
    
    for i:=0; i<len(month[d[1]]); i++ {
        ans = append(ans, month[d[1]][i])
    }
    
    ans = append(ans, '-')
    
    if len(d[0])==3 {
            ans = append(ans, '0')
    }
    
    for i:=0; i<len(d[0]); i++ {
        if d[0][i]-'0'>=0 && d[0][i]-'0'<=9 {
            ans = append(ans, d[0][i])
        }
    }
    
    return string(ans)
}

討論區看到的漂亮解法:

func reformatDate(date string) string {
    month := map[string]string{
        "Jan": "01",
        "Feb": "02",
        "Mar": "03",
        "Apr": "04",
        "May": "05",
        "Jun": "06",
        "Jul": "07",
        "Aug": "08",
        "Sep": "09",
        "Oct": "10",
        "Nov": "11",
        "Dec": "12",
    }
    if len(date) == 12 { date = "0" + date }
    return date[9:] + "-" + month[date[5:8]] + "-" + date[:2]
}

Last updated