模拟即可
Go版本
func valid(s string) bool {
hasHyphens := false
for i, ch := range s {
if unicode.IsDigit(ch) || strings.ContainsRune("!.,", ch) && i < len(s)-1 {
return false
}
if ch == '-' {
if hasHyphens || i == 0 || i == len(s)-1 || !unicode.IsLower(rune(s[i-1])) || !unicode.IsLower(rune(s[i+1])) {
return false
}
hasHyphens = true
}
}
return true
}
func countValidWords(sentence string) (ans int) {
for _, s := range strings.Fields(sentence) { // 按照空格分割
if valid(s) {
ans++
}
}
return
}
java版本:
class Solution {
public int countValidWords(String sentence) {
// 包含字母,连字符,标点符号
// 连字符需要左右都是字母
// 标点符号应当位于 token 的 末尾。
// '!'、'.' 和 ','
// '-'
int count=0;
int value_length=0,value=0;
int n=sentence.length();
char temp;
int value_1=0,value_2=0;
// for(String value:arr){
// value_length=0;
// System.out.println("value_length:"+value);
for(int i=0;i<n;i++){
temp=sentence.charAt(i);
if(temp==' '){
// System.out.println("value_length:"+value_length);
// System.out.println("value:"+value+" i:"+i+" count: "+count);
if(value_length==i-value && value_length!=0 && value_1<2 && value_2<2){
count++;
}
value_length=0;
value=i+1;
value_1=0;
value_2=0;
continue;
}
if(temp-'a'<26 && temp-'a'>=0 ){
value_length++;
continue;
}
if(temp=='-' && value_length>0 && (i!=n-1 && sentence.charAt(i+1)!=' ')){
value_length++;
value_1++;
continue;
}
if((temp=='!' || temp=='.' || temp==',') && ( i==n-1 ||
(i!=n-1 && sentence.charAt(i+1)==' ' )) ){
value_length++;
value_2++;
continue;
}
}
// System.out.println("count:"+count);
// System.out.println("value_length:"+value_length);
// System.out.println("value:"+value);
if(value_length==n-value && value_length!=0 && value_1<2 && value_2<2){
count++;
};
return count;
}
}
网友评论