-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathCheckIfNumbersAreAscendingInASentence.java
40 lines (36 loc) · 1.39 KB
/
CheckIfNumbersAreAscendingInASentence.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// https://leetcode.com/problems/check-if-numbers-are-ascending-in-a-sentence
// T: O(|s|)
// S: O(|s|)
import java.util.LinkedList;
import java.util.Queue;
public class CheckIfNumbersAreAscendingInASentence {
public boolean areNumbersAscending(String s) {
StringBuilder word = new StringBuilder();
final Queue<String> numbers = new LinkedList<>();
for (int i = 0 ; i < s.length() ; i++) {
if (s.charAt(i) == ' ') {
if (isNumber(word)) {
if (!numbers.isEmpty() && lessThanEqual(word.toString(), numbers.peek())) {
return false;
}
numbers.poll();
numbers.add(word.toString());
}
word = new StringBuilder();
} else word.append(s.charAt(i));
}
return !isNumber(word) || numbers.isEmpty() || !lessThanEqual(word.toString(), numbers.peek());
}
private boolean isNumber(StringBuilder s) {
return Character.isDigit(s.charAt(0));
}
private boolean lessThanEqual(String s, String o) {
if (s.length() < o.length()) return true;
if (s.length() > o.length()) return false;
for (int i = 0 ; i < s.length() ; i++) {
if (s.charAt(i) < o.charAt(i)) return true;
if (s.charAt(i) > o.charAt(i)) return false;
}
return true;
}
}