题目

类型:字符串

image.png

解题思路

先将 sentence 按照空格进行分割,得到多个 item,再对每个 item 进行合法性检查,最后统计合法的 item 个数即为答案
在对 item 进行合法性检查时,分别使用 c1 和 c2 代表「连字符」和「标点符号」的出现次数。

代码

  1. class Solution {
  2. public int countValidWords(String sentence) {
  3. String[] ss = sentence.split(" ");
  4. int ans = 0;
  5. for (String s : ss) if (check(s)) ans++;
  6. return ans;
  7. }
  8. boolean check(String s) {
  9. int n = s.length();
  10. if (n == 0) return false;
  11. for (int i = 0, c1 = 0, c2 = 0; i < n; i++) {
  12. char c = s.charAt(i);
  13. if (Character.isDigit(c)) return false;
  14. if (c == ' ') return false;
  15. if (c == '-' && ++c1 >= 0) {
  16. if (c1 > 1 || (i == 0 || i == n - 1)) return false;
  17. if (!Character.isLetter(s.charAt(i - 1)) || !Character.isLetter(s.charAt(i + 1))) return false;
  18. }
  19. if ((c == '!' || c == '.' || c == ',') && ++c2 >= 0) {
  20. if (c2 > 1 || (i != n - 1)) return false;
  21. }
  22. }
  23. return true;
  24. }
  25. }