假设如果一个句子包含 >= 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/