UVa 1593 - Alignment of Code

题目描述 : 输入若干行代码,按照要求格式输出,。各列单词尽量靠左,单词之间至少要一个空格。

思路 : 利用字符串数组找规律。  只要控制好边界其他的都很简单。  连测试用例都没有用,因为UVa网页老刷不出来。直接交代码QuickSubmit,只是担心会超时,但结果令人意外,竟然是AC。再来两道吧。      对了 我又不好意思的用了正则表达式。

代码 :

<p>import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;</p><p>public class Main1593 {</p><p> public static void main(String[] args) {
  Scanner scan = new Scanner(System.in);
  Pattern p = Pattern.compile("<a target=_blank href="file://\\S">\\S</a>+");
  String[][] str = new String[1005][1000];
  int rows = 0;
  int[] rowcnt = new int[1000];
  Arrays.fill(rowcnt, 0);
  while(scan.hasNextLine()) {
   String line = scan.nextLine();
   Matcher m = p.matcher(line);
   int cols = 0;
   while(m.find()) {
    rowcnt[rows] ++;
    str[rows][cols++] = m.group();
   }
   rows ++;
  }
  //System.out.println(rows);
  int[] maxlen = new int[850];
  Arrays.fill(maxlen, 0);
  for(int i=0; i<rows; i++) {
   for(int j=0; j<rowcnt[i]; j++) {
    maxlen[j] = max(maxlen[j], str[i][j].length());
   }
  }
  for(int i=0; i<rows; i++) {
   for(int j=0; j<rowcnt[i]; j++) {
    System.out.print(str[i][j]);
    if(j < rowcnt[i]-1)
    for(int k=0; k<=maxlen[j]-str[i][j].length(); k++) 
     System.out.print(" ");
   }
   System.out.println();
  }
 }
 public static int max(int a, int b) {
  if(a >= b)
   return a;
  else
   return b;
 }
}
</p>
posted @ 2014-12-26 19:32  Pickle  阅读(239)  评论(0编辑  收藏  举报