时间复杂性Java



程序计算给定文本时句子中的最大字数。一篇文章可以有多个句子。我必须找到单词最多的句子

我有以下代码,我需要为此优化时间复杂性不应超过5秒

import java.util.*;
import java.io.*;

class Solution {
    public int solution(String S) {
        // write your code in Java SE 8
        List<Integer> wca=new ArrayList<Integer>();
        int wc,i;
        String[] sent=S.split("\.+");
        while(sent.length!=0){
            for(i=0;i<sent.length;i++){
               wc=sent[i].split("\s+").length; 
               wca.add(wc);
            }
        }
        Collections.sort(wca);
        return(wca.get(wca.size()-1));

    }
}

您不需要对列表进行排序,只需找到其最大值。事实上,你根本不需要一份清单。只需边读边储存最长的句子。

public int findLongestSentence(String paragraph) {
    String[] sentences = paragraph.split("\.|\!|\?");
    int maxSentenceLength = 0;
    for(String sentence : sentences) {
        String[] words = sentence.split("\s");
        maxSentenceLength = Math.max(words.length, maxSentenceLength);
    }
    return maxSentenceLength;
}

这可以通过不使用split()方法来提高效率,但这不会影响渐近时间复杂性。

附言:信息性的变量名很重要,再加上良好的代码格式,使代码更容易阅读。

该程序统计一句话中的最大字数

假设你有这样的文本:

Lorem ipsum dolor坐amet,consectetur adipisci elit,sed eiusmod tempor incident ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员是尼西,而不是像康奎特商品一样。这是一个很好的例子。除非你没有得到任何帮助,否则你不应该受到惩罚。

按点拆分(.)

arr[0]= Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua
arr[1]= Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat
arr[2]= Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
arr[3]= Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

单词的数量与空格的数量有关,所以计算空格会更容易

int max=0;//这保持了最大空间计数int索引=0;//这保存了最大空间计数的索引

在数组上迭代

   int spaces = arr[i].length - arr[i].replace(" ","").length;
    if(spaces>max){
         max = spaces;
         index = i;
    }

在循环结束时,您将获得该句子的最大单词量和数组索引

根据我的理解,您想要解析输入文本,这样您就可以获得每个句子的字数,并找到最高的句子。

首先,你只返回最高字数,而没有返回任何内容来识别句子本身。

第二(正如其他人已经指出的)排序可以用只保留最长的句子来代替,当找到一个更长的句子时,替换它。这确实会使它变成O(n)。

第三个问题是句子不能只以句号结尾。

  String longest;
for (String s : sentences){
 if(s.split(" ").length>longest.split(" ").length))
{
longest = s
}
}
return longest;

最新更新