题目来源:HJ2 计算某字符出现次数
题目描述:
思路1:
具体实现1: 使用toLowerCase()用来将输入的内容全部转换为小写,再使用getChars()将字符从字符串复制到目标字符数组,进行一一比较后计数
public static void main(String[] args){
int sum = 0;
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine().toLowerCase();
//nextLine()会获取整行的数据,包括字符串之间的空格,直到遇到回车
//toLowerCase()用来将输入的内容全部转换为小写,因为题目要求不区分大小写
String str1 = scanner.nextLine().toLowerCase();
/*str是用来接收输入的字符串,str1用来接收字符,
因为nextLine()遇到回车就会结束,所以正好可以分开接收str与str1*/
char[] chars = new char[str.length()];
char[] chars1 = new char[1];
str.getChars(0,str.length(),chars,0);
str1.getChars(0,str1.length(),chars1,0);
//getChars()将字符从字符串复制到目标字符数组
/*getChars()的第二个参数是字符串中要复制的最后一个字符之后的索引,
* 所以如果写成str.length()-1,这只是到了最后一个字符的索引,而不是最后
* 一个字符之后的索引*/
for(int i = 0;i < str.length(); i++){
if(chars[i] == chars1[0]){
sum++;
}
}
System.out.println(sum);
}
- 时间复杂度:O(n) ——转换为小写以及复制到字符数组,都需要遍历
- 空间复杂度:O(n) ——引入了额外的字符数组
思路2:
具体实现2: 使用toLowerCase()用来将输入的内容全部转换为小写;将字符串中与所检查的字符相同的字符替换为空(理解为删去),最后计算删除相同字符后剩余的length即可,用原length减去剩余length即可
/**
* 1.接收输入的第一个字符串,并转换为小写。(完整字符串str1)
* 2.接收输入的第二个字符串,并转换为小写。(单个字符str2)
* 3.将str1中的str2字符串全部替换为 “”
* 4.用str1.length-str2.length = 出现次数
*/
public static void main(String[] args){
Scanner input = new Scanner(System.in);
// 完整字符串
String str1 = input.nextLine().toLowerCase();
// 单个字符串
String str2 = input.nextLine().toLowerCase();
// 完整字符的长度-单个字符长度 = 出现的次数
int num = str1.length() - str1.replaceAll(str2,"").length();
System.out.println(num);
}
- 时间复杂度:O(n) 进行替换时,需要遍历
- 空间复杂度:O(1)