题意整理

  • 输入一个由字母和数字以及空格组成的字符串,以及一个字母。
  • 输出字母在字符串中出现的次数。

方法一(计数+转化为小写)

1.解题思路

  • 定义一个变量count用于计数。将输入字符串以及指定字符变为小写形式。
  • 遍历整个字符串,如果当前字符与指定字符相等,则计数加一。
  • 返回最后count的结果,即为字符出现的次数。

动图展示: alt

2.代码实现

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        //标准输入
        Scanner sc=new Scanner(System.in);
        //输入字符串
        String s=sc.nextLine().toLowerCase();
        //输入字符
        char c=sc.next().toLowerCase().charAt(0);
        //计数
        int count=0;
        for(int i=0;i<s.length();i++){
            //如果出现的指定的字符,计数加一
            if(s.charAt(i)-c==0){
                count++;
            }
        }
        System.out.println(count);
    }
}

3.复杂度分析

  • 时间复杂度:需要遍历整个字符串,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)

方法二(计数+字符库函数)

1.解题思路

与方法一思路基本相同,不过使用字符库函数将当前字符转化为其大小或者小写,来与指定字符比较。

2.代码实现

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        //标准输入
        Scanner sc=new Scanner(System.in);
        //输入字符串
        String s=sc.nextLine();
        //输入指定字母
        char c=sc.next().charAt(0);
        //计数
        int count=0;
        for(int i=0;i<s.length();i++){
            //如果是指定字母,或者其大小写,则计数加一
            if(s.charAt(i)==c||Character.toUpperCase(s.charAt(i))==c||Character.toLowerCase(s.charAt(i))==c){
                count++;
            }
        }
        System.out.println(count);
    }
}

3.复杂度分析

  • 时间复杂度:需要遍历整个字符串,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)