题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); StringBuffer ab = new StringBuffer();//输出结果 String a; String[] ans = new String[8];//存放最后8条 char[] chs; char[][] way = new char[100][16];//存放路径 int i, j, k = 0; int[] ls = new int[100];//存放行号 int[] num = new int[100];//存放数目 boolean b; try { while ((a = r.readLine()) != null && !a.isEmpty()) { chs = a.toCharArray(); i = chs.length - 1; j = 15; b = false; while (i >= 0) {//逆序遍历,获得路径 if (chs[i] == ' ') { b = true; i--; continue; } if (chs[i] == '\\') break; if (j == -1) break; if (b) way[k][j--] = chs[i]; i--; } i = 0; b = false; while (i < chs.length) {//顺序遍历,获得行号 if (chs[i] == ' ') { b = true; i++; continue; } if (b) { ls[k] *= 10; ls[k] += chs[i] - '0'; } i++; } num[k] = 1;//记录数为1 k++;//记录+1 } } catch (IOException e) { throw new RuntimeException(e); } i = 0; while (i < 99) { if (way[i][15] == '\u0000') { i++; continue; } j = i + 1; while (j < 100) { if (way[j][15] == '\u0000') { j++; continue; } k = 0; while (k < 16) { if (way[i][k] != way[j][k]) break; k++; } if (k == 16 && ls[i] == ls[j]) {//路径相等且行号相等 num[i]++;//数目+1 way[j][15] = '\u0000';//最后一个字符置为空,以示标记 } j++; } i++; } i = 99; j = 0; while (i >= 0) {//逆序遍历获得最后8条 if (way[i][15] == '\u0000') { i--; continue; } if (j == 8) break; k = 0; ab.setLength(0); while (k < 16) { if (way[i][k] != '\u0000') ab.append(way[i][k]); k++; } ab.append(" "); ab.append(ls[i]); ab.append(" "); ab.append(num[i]); ans[j++] = ab.toString();//将结果字符串放入字符串数组 i--; } i = 7; ab.setLength(0); while (i >= 0) { if (ans[i] == null || ans[i].isEmpty()) { i--; continue; } ab.append(ans[i]); ab.append("\n"); i--; } System.out.print(ab);//打印输出 } }