java - 这个算法真的需要两次通过吗?

标签 java algorithm

假设如果一个句子包含 >= 4 个数字,我想对每个单词执行一个 Action 。例如,

  • 这是一个包含 10、23、30、50、60 的字符串。
  • 这是一个包含10的字符串,同时也包含23。

我需要对上面的第一句话采取特别的行动,因为它包含超过 4 个数字。在我提出的上面的算法中,它需要字符串列表的两次传递。这个任务有更有效的算法吗?例如,只有一次通行证?谢谢。

void process (List<String> sentence) {
    boolean has4AboveNum = false;
    if(containsMoreThan4Numbers(sentence)) {
        has4AboveNum = true;
}

for(String word : sentence) {
   if(has4AboveNum) {
      doSomething(word);   
  }
}   
}

boolean containsMoreThan4Numbers(List<String> sentence) {
int numCount = 0;
for(String word : sentence) {
  if(numCount>4){
     return true;
  }  
 if(isNumber(word)) {
      numCount++;
  }
   }
return false;
} 

最佳答案

您可以通过解析字符串在一个路径上完成,并在字符串上一次性创建 List<String>仅包含字符串中的数字,列表中的每个元素都是在字符串中找到的不同数字。

现在,您所要做的就是检查 list.size() - 并确保它在所需范围内。

List<String> getNumbers(List<String> sentence) {
   List<String> res = new ArrayList<>();
   for(String word : sentence)  {
     if(isNumber(word)) res.add(word);
   }
   return res;
} 

关于java - 这个算法真的需要两次通过吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30174118/

相关文章:

java - 在 JAVA 中格式化 Date.toString() 输出

java - 开发人员很少的小型项目的源代码控制

java - 按时间和分数对帖子进行排序的 Firestore 查询

algorithm - 画树不受度数限制

java - 从 SQL DDL 语句创建 Java 对象

algorithm - Dijkstra 中访问集的目的是什么?

algorithm - FB 配置文件连接

algorithm - 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

android - 使用 QueueLinearFloodFillAlgorithm 着色时留下的空白

java - WSDL 生成的 SOAPClient 无效 SOAP 1.1 消息