算法练习100天-第4天

2020-09-03  本文已影响0人  有意思的小太太

类别:数组

题目: 1507. 转变日期格式

我的思路:

class Solution {
    public static String reformatDate(String date) {
        //将日期按" "拆分成年、月、日
        String[] dateArray = date.split(" ");
        //年
        String year = dateArray[2];
        //月
        Map<String, String> monthMap = new HashMap(16);
        monthMap.put("Jan","01");
        monthMap.put("Feb","02");
        monthMap.put("Mar","03");
        monthMap.put("Apr","04");
        monthMap.put("May","05");
        monthMap.put("Jun","06");
        monthMap.put("Jul","07");
        monthMap.put("Aug","08");
        monthMap.put("Sep","09");
        monthMap.put("Oct","10");
        monthMap.put("Nov","11");
        monthMap.put("Dec","12");
        String month = monthMap.get(dateArray[1]);
        //日
        String day = dateArray[0].substring(0, dateArray[0].length()-2);
        return year +"-"+ month + "-" + (day.length() == 1 ? "0" + day : day);
    }
}

leetcode上其他童鞋思路

1.解题思路
先分割成三段,日月年,然后分别处理即可
class Solution {
    public String reformatDate(String date) {
        Map<String,String> map = new HashMap<>();
        map.put("Jan","01");map.put("Feb","02");map.put("Mar","03");
        map.put("Apr","04");map.put("May","05");map.put("Jun","06");
        map.put("Jul","07");map.put("Aug","08");map.put("Sep","09");
        map.put("Oct","10");map.put("Nov","11");map.put("Dec","12");
        String[] strings = date.split(" ");
        StringBuilder ans = new StringBuilder();
        ans.append(strings[2]).append('-').append(map.get(strings[1])).append('-');
        return strings[0].length() > 3 ?
                ans.append(strings[0].substring(0,2)).toString():
                ans.append("0"+strings[0].substring(0,1)).toString();
    }
}

2.解题思路
首先,我们可以按照空格把字符串分割成三部分,分别取出日、月、年。对于他们分别做这样的事情:
日:去掉结尾的两位英文字母,如果数字只有一位再补上前导零
月:使用字典映射的方式把月份的英文缩写转换成对应的数字
年:不用变化
最终组织成「年-月-日」的形式即可。
class Solution {
    public String reformatDate(String date) {
        String[] months = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
        Map<String, Integer> s2month = new HashMap<String, Integer>();
        for (int i = 1; i <= 12; i++) {
            s2month.put(months[i - 1], i);
        }
        String[] array = date.split(" ");
        int year = Integer.parseInt(array[2]);
        int month = s2month.get(array[1]);
        int day = Integer.parseInt(array[0].substring(0, array[0].length() - 2));
        return String.format("%d-%02d-%02d", year, month, day);
    }
}
复杂度分析

时间复杂度:O(1)O(1)。
空间复杂度:O(1)O(1)。

相同点:

1.字符串分割成三部分,分别取出日、月、年
2.用Map(k,v)映射月份

差异点:

1.解题思路1最后是用StringBuilder拼接字符串,比较节省内存
2.解题思路2使用String.format()格式化并连接字符串,日、月补0的方式更简洁

上一篇 下一篇

猜你喜欢

热点阅读