2047. Number of Valid Words in a Sentence

Difficulty:
Related Topics:
Similar Questions:

Problem

A sentence consists of lowercase letters ('a' to 'z'), digits ('0' to '9'), hyphens ('-'), punctuation marks ('!', '.', and ','), and spaces (' ') only. Each sentence can be broken down into one or more tokens separated by one or more spaces ' '.

A token is a valid word if all three of the following are true:

Examples of valid words include "a-b.", "afad", "ba-c", "a!", and "!".

Given a string sentence, return **the *number* of valid words in **sentence.

  Example 1:

Input: sentence = "cat and  dog"
Output: 3
Explanation: The valid words in the sentence are "cat", "and", and "dog".

Example 2:

Input: sentence = "!this  1-s b8d!"
Output: 0
Explanation: There are no valid words in the sentence.
"!this" is invalid because it starts with a punctuation mark.
"1-s" and "b8d" are invalid because they contain digits.

Example 3:

Input: sentence = "alice and  bob are playing stone-game10"
Output: 5
Explanation: The valid words in the sentence are "alice", "and", "bob", "are", and "playing".
"stone-game10" is invalid because it contains digits.

  Constraints:

Solution (Java)

class Solution {
    public int countValidWords(String sentence) {
        String[] tokens = sentence.split("\\s+");
        int count = 0;
        for (String token : tokens) {
            int hyphenCount = 0;
            int punctuationMarkCount = 0;
            boolean valid = true;
            if (token.isEmpty() || token.equals("")) {
                continue;
            }
            for (int i = 0; i < token.length(); i++) {
                if (token.charAt(i) == '-') {
                    hyphenCount++;
                    if (hyphenCount > 1
                            || i == 0
                            || i == token.length() - 1
                            || !Character.isAlphabetic(token.charAt(i - 1))
                            || !Character.isAlphabetic(token.charAt(i + 1))) {
                        valid = false;
                        break;
                    }
                } else if (token.charAt(i) == '!'
                        || token.charAt(i) == '.'
                        || token.charAt(i) == ',') {
                    punctuationMarkCount++;
                    if (punctuationMarkCount > 1 || i != token.length() - 1) {
                        valid = false;
                        break;
                    }
                } else if (Character.isDigit(token.charAt(i))) {
                    valid = false;
                    break;
                }
            }
            if (valid) {
                count++;
            }
        }
        return count;
    }
}

Explain:

nope.

Complexity: