5906. 句子中的有效单词数

力扣打卡:5906. 句子中的有效单词数

解题思路

字符串的题目是真的搞人心态,每次都是

先分组,然后按照要求来做就可以了,没用正则,不过还是要学习正则的匹配的

代码

class Solution {
    HashSet<Character> set1 = new HashSet<>();
    HashSet<Character> set2 = new HashSet<>();
    public int countValidWords(String sentence) {
    	set1.add('!');set1.add(',');set1.add('.');
    	for(int i=0; i<10; i++) set2.add((char) ('0'+i));
    	
    	String[] arr = sentence.split(" ");
    	int count = 0;
    	for(int i=0; i<arr.length; i++) {
    		if(check(arr[i])) count++;
    	}
    	return count;
    }

    public boolean check(String s) {
//    	检查每一个单词
    	s = s.trim();
    	if("".equals(s)) return false;
    	int cnt1 = 0; // 统计-字符的个数
    	int cnt2 = 0; // 统计标点符号的个数
    	if(s.charAt(0)=='-' || s.charAt(s.length()-1)=='-') return false; // 如果第一个或者是最后一个是-
    	if(set1.contains(s.charAt(0)) && s.length()!=1) return false; // 如果第一个是标点符号,而且长度不是1,那么不算有效
    	for(int i=0; i<s.length(); i++) { //开始遍历字符串
    		char c = s.charAt(i);
    		if(c=='-') {
                cnt1++; if(cnt1>1) return false; 
                char a = s.charAt(i-1);
                char b = s.charAt(i+1);
                if( !('a'<=a && a<='z' && 'a'<=b && b<='z')) return false; // 检查-两边的字符是不是小写字符
            }
    		if(set1.contains(c)) {
                cnt2++; if(cnt2>1) return false;  // 检查标点符号的作用
                if(i!=s.length()-1) return false; // 如果标点符号不是末尾
            }
    		if(set2.contains(c)) return false;

    	}
    	return true;
    }
}

崩溃过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值