day2 HJ2 计算某字符出现次数

161 阅读2分钟

题目来源:HJ2 计算某字符出现次数

题目描述:

image.png 思路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)