当前位置:网站首页>One question per day 2047 Number of valid words in the sentence

One question per day 2047 Number of valid words in the sentence

2022-07-05 05:42:00 A big pigeon

Judge the number of effective words in the sentence .

The topic is relatively simple , Split sentences into words , Then judge whether the word is valid .

however “ It works ” The conditions are a little cumbersome :

If one token At the same time, the following conditions are met , I think this is token Is a valid word :

1. No numbers
2. At most one A hyphen '-' . If there is , There should be lowercase letters on both sides of the hyphen ("a-b" Is a valid word , but "-ab" and "ab-" Not a valid word ).
3. At most one Punctuation . If there is , Punctuation marks should be located at token Of At the end of .

  Official explanation :

class Solution:
    def countValidWords(self, sentence: str) -> int:
        def valid(s):
            hasHyphens = False
            for i, ch in enumerate(s):
                if ch.isdigit() or ch in "!.," and i < len(s)-1:
                    return False
                if ch == '-':
                    if hasHyphens or i==0 or i== len(s)-1 or not s[i-1].islower() or not s[i+1].islower():
                        return False
                    hasHyphens = True
            return True
                
        return sum(valid(s) for s in sentence.split())        

His writing :

I haven't seen it before , Easy to leak conditions .

class Solution:
    def countValidWords(self, sentence: str) -> int:
        tokens = sentence.split()
        count = 0
        print(tokens)
        
        for token in tokens:
            istoken = True
            hasHyphens = False
            for i,x in enumerate(token):
                if x.isdigit():
                    istoken = False
                    break 
                if x in "!.," and i != len(token)-1:
                    istoken = False
                    break
                if x == '-':
                    if hasHyphens or i==0 or i== len(token)-1 or not token[i-1].islower() or not token[i+1].islower():
                        istoken = False
                        break
                    hasHyphens = True 
            if istoken and token:
                count += 1
        
        return count

  Add :

Three ways to simplify code learned :

One 、enumerate(iterable,start=0) Returns an enumeration object , It contains a count value and iteration object iterable Generated value .

This method is equivalent to :

def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1

Built in functions — Python 3.10.2 file

Two 、sum(iterable/start=0) Also can be [True,True,False] So boolean type sums , Return to it True Number .

from  start  Start from left to right  iterable  And returns the total value . iterable  The term of is usually a number , and start Value is not allowed to be a string .

3、 ... and 、 use in Instead of multiple == or == or ==

Such as : ch in "!.,"

x in [1,3,5],

原网站

版权声明
本文为[A big pigeon]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140620422543.html