题目
- 题目描述
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写。 - 输入描述:
第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。 - 输出描述:
输出输入字符串中含有该字符的个数。 - 示例1
- 输入
ABCabc
A - 输出
2
题解:
- 第一种解法(我自己的解法):
本以为自己的这种解法很慢,结果发现是因为使用的Scanner scanner=new Scanner这种输入,这种输入会很慢,而且内存消耗较多。改为 BufferedReader后运行结果就 好了。
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(new InputStreamReader(System.in));
String str = scanner.nextLine().toLowerCase();
String character = scanner.nextLine().toLowerCase();
int i = str.indexOf(character);
int count = 0;
while (i != -1) {
count++;
str = str.substring(i + 1);
i = str.indexOf(character);
}
System.out.println(count);
scanner.close();
}
public static void main(String[] args) throws IOException {
BufferedReader scanner = new BufferedReader(new InputStreamReader(System.in));
String str = scanner.readLine().toLowerCase();
String character = scanner.readLine().toLowerCase();
int i = str.indexOf(character);
int count = 0;
while (i != -1) {
count++;
str = str.substring(i + 1);
i = str.indexOf(character);
}
System.out.println(count);
scanner.close();
}
- 第二种方法(其他优秀速度和内存的解法):
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] chars1 = br.readLine().toLowerCase().toCharArray();
char[] chars2 = br.readLine().toLowerCase().toCharArray();
int count = 0;
for (int i = 0; i < chars1.length; i++) {
if ((chars1[i] >= 65 || chars1[i] < 90) && (chars1[i] == chars2[0])) {
count++;
}
}
System.out.println(count);
}