• 68. Text Justification


        /*
         * 68. Text Justification 
         * 2016-5-9 by Mingyang
         * 首先是我的代码
         */
         public List<String> fullJustify1(String[] words, int maxWidth) {
                int start=0;
                StringBuffer sb=new StringBuffer();
                List<String> res=new ArrayList<String>();
                while(start<words.length){
                    if(sb.toString().length()+words[start].length()>maxWidth){
                        res.add(alignment(sb,maxWidth));
                        sb=new StringBuffer();
                        start++;
                    }else{
                        sb.append(" ");
                        sb.append(words[start]);
                        start++;
                    }
                }
                if(sb.toString().length()!=0){
                    res.add(sb.toString());
                }
                return res;
            }
           public static String alignment(StringBuffer sb,int L){
                    String temp=sb.toString().trim();
                    String[] array=temp.split(" ");
                    int sum=0;
                    for(int i=0;i<array.length;i++){
                        sum+=array[i].length();
                    }
                    int space=(L-sum)/(array.length-1);
                    String re="";
                    while(space>0){
                        re=re+" ";
                        space--;
                    }
                    StringBuffer res=new StringBuffer();
                    for(int i=0;i<array.length;i++){
                        res.append(array[i]);
                        res.append(re);
                    }
                    String result=res.toString().trim();
                    if(result.length()<L){
                        sb.insert(0, " ");
                    }
                    return result;
                }
           /*
            * 网上的代码  
            */
        public static ArrayList<String> fullJustify(String[] words, int L) {
            ArrayList<String> res = new ArrayList<String>();
            if (words == null || words.length == 0)
                return res;
            int count = 0;
            int last = 0;
            for (int i = 0; i < words.length; i++) {
                // count是上一次计算的单词的长度,words[i].length()是当前尝试放的一个单词的长度,
                // 假设当前放上了这个单词,那么这一行单词跟单词间的间隔数就是i-last
                // 判断这些总的长度加起来是不是大于L(超行数了)
                if (count + words[i].length() + (i - last) > L) {
                    int spaceNum = 0;
                    int extraNum = 0;
                    // 因为尝试的words[i]失败了,所以间隔数减1.此时判断剩余的间隔数是否大于0
                    if (i - last - 1 > 0) {
                        // 是间隔的倍数(为啥要减1,因为尝试当前words[i]后发现比L长了,
                        // 所以当前这个单词不能算作这行,所以间隔就减少一个
                        spaceNum = (L - count) / (i - last - 1);
                        extraNum = (L - count) % (i - last - 1);// 不是倍数的话还要计算
                    }
                    StringBuilder str = new StringBuilder();
                    for (int j = last; j < i; j++) {
                        str.append(words[j]);
                        if (j < i - 1) {// words[i-1]的话后面就不用填空格了,所以这里j<i-1
                            for (int k = 0; k < spaceNum; k++)
                                str.append(" ");
    
                            if (extraNum > 0)
                                str.append(" ");
    
                            extraNum--;
                        }
                    }
    
                    // 下面这个for循环作用于一行只有一个单词还没填满一行的情况
                    for (int j = str.length(); j < L; j++)
                        str.append(" ");
    
                    res.add(str.toString());
                    count = 0;
                    last = i;// 下一个开始的单词
                }
                count += words[i].length();
            }
    
            // 处理最后一行
            StringBuilder str = new StringBuilder();
            for (int i = last; i < words.length; i++) {
                str.append(words[i]);
                if (str.length() < L)
                    str.append(" ");
            }
            for (int i = str.length(); i < L; i++)
                str.append(" ");
    
            res.add(str.toString());
            return res;
        }
  • 相关阅读:
    中学数学
    XBT Tracker 服务器配置
    【转】>Unity3d动态数据管理(Export AssetBundles)
    [转]MySQL 5.1.56 for Windows XP/Vista/7
    [转]全面理解Unity加载和内存管理
    [转]Unity3D Editor 编辑器简易教程
    Dow falls 97 points, worst showing this year
    [转]Boost库编译后命名方式
    free falling
    01、Direct3D 11 Basics
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5477350.html
Copyright © 2020-2023  润新知