题目链接
https://vjudge.net/problem/%E8%AE%A1%E8%92%9C%E5%AE%A2-T1982
思路
先用set集合对原始数据按照yyyy/mm/dd格式进行排序,这样小的年份就在前面
然后遍历set集合的每一个字符串,就是每一个日期,进行转换成mm//dd/yyyy格式
存放到list集合里面
最后遍历list集合
代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
public class Main {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
int n = _05Reader.nextInt();
Set<String> set = new TreeSet<String>();
for (int i = 0; i < n; i++) {
//String对象是不可变的,所以利用+会建立一个新字符串对象,这是十分费时的,
//而StringBuilder或StringBuffer类对象是可变的,可以添加、删除和修改字符。
//由于StringBulider速度比StringBuffer快,所以StringBulider在OJ比赛中更常用
String str = _05Reader.nextLine();
StringBuilder sb = new StringBuilder();
//转换成年月日的格式yyyy/mm/dd 方便排序
String y = str.split("/")[2];
sb.append(y);
sb.append("/");
String m = str.split("/")[0];
sb.append(m);
sb.append("/");
String d = str.split("/")[1];
sb.append(d);
//排序用set
set.add(sb.toString());
}
//遍历
List<String> list = new ArrayList<String>();
for (String string : set) {
//最后再以mm/dd/yyyy方式输出
StringBuilder sb2 = new StringBuilder();
//转换成年月日的格式yyyy/mm/dd 方便排序
String m = string.split("/")[1];
sb2.append(m);
sb2.append("/");
String d = string.split("/")[2];
sb2.append(d);
sb2.append("/");
String y = string.split("/")[0];
sb2.append(y);
//这里用一个list集合,不要再排序了,否则又回到起点
list.add(sb2.toString());
}
for (String string2 : list) {
System.out.println(string2);
}
}
}
class _05Reader {
static BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
static String next() throws Exception {
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(br.readLine());
}
return tokenizer.nextToken();
}
static String nextLine() throws Exception {
return br.readLine();
}
static int nextInt() throws Exception {
return Integer.parseInt(next());
}
}
说明
这个代码有点问题,这一题能通过测试用例,但是去OJ网上提交,提示只通过6组测试(共10组),不晓得代码出现什么问题,先这样吧…