牛客题目:找出给定字符串中大写字符(即‘A‘-‘Z‘)的个数。

疑问:假设极限情况下输入的字符串足够长一次读取一行会导致OOM,这题目要怎么处理?

牛客题目:找出给定字符串中大写字符(即'A'-'Z')的个数。

牛客链接:https://www.nowcoder.com/practice/434414efe5ea48e5b06ebf2b35434a9c?tpId=37&&tqId=21307&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 找出给定字符串中大写字符(即'A'-'Z')的个数。
 * */
public class HJ84 {
    public static void main(String[] args) throws IOException {
        List target = new ArrayList<>(26);
        for (char i='A'; i<='Z'; ++i) {
                target.add(i);
        }

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while((line=reader.readLine())!=null) {
            int count = 0;
            for (int i = 0; i < line.length(); i++) {
                if (target.contains(line.charAt(i))) {
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}

用lamba表达式改进下

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

/**
 * 找出给定字符串中大写字符(即'A'-'Z')的个数。
 * */
public class HJ84 {
    public static void main(String[] args) throws IOException {
        List target = new ArrayList<>(26);
        IntStream.rangeClosed('A', 'Z').forEach(ch->target.add(ch));

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while((line=reader.readLine())!=null) {
            long count = line.chars().filter(target::contains).count();
            System.out.println(count);
        }
    }
}

 

你可能感兴趣的:(算法学习)