华为机试-HJ2 计算某字符出现次数

144 阅读2分钟

题目

image.png

www.nowcoder.com/practice/a3…

我的题解

import java.util.*;

public class Main {

    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        String word = sc.nextLine();
        String str = sc.nextLine();
        char[] arr = word.toCharArray();
        char a = str.charAt(0);
        int total = 0;
        for (int i = 0; i < arr.length; i++) {
            if (a == arr[i] || a == arr[i] + 32 || a == arr[i] - 32 ) {
                total++;
            }
        }
        System.out.println(total);
    }
}

image.png

image.png

image.png

ASCLL码

解题时的思路:

1、读入两个数据

2、最开始想用遍历字符串的每个字符然后用java的equalsIgnoreCase比较、但是 for (int i = 0; i < word.length(); i++)之后想不到好方法取值、放弃

3、char[] arr = word.toCharArray();和char a = str.charAt(0);分别可以取出来字符、然后去比较

4、因为大小写、就想到了(a == arr[i] || a == arr[i] + 32 || a == arr[i] - 32 )这种方式来兼容大小写。 题目要求可以为数字、字母、空格、+32和-32这种就太片面、本来范围是数字相等、空格相等、字母大小写匹配;而此时不仅字符相等算匹配成功、而且字符+32,字符-32、这两种情况也都匹配了、显然是错误的

订正

image.png

image.png

总结:

1、判断字符串是否相等

a.equalsIgnoreCase(b)
a.toUpperCase()
a.toLowerCase()
Character.toUpperCase(s.charAt(i))

2、统一Format的思想、我当时就想单个比较时去Fromat、还要掌握这种整体Format的思想

题解1

    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);
    }

image.png

总结:

1、 String s = sc.nextLine().toLowerCase(); 这种连续使用方法的方式、可以是代码更整洁

2、我当时没想出来的、遍历字符串取字符的写法

for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) - c == 0) {
    }
}

3、判断字符相等方式

if (s.charAt(i) - c == 0)
if (s.charAt(i) == c)

题解2

    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] == chars2[0]) {
                count++;
            }
        }
        System.out.println(count);
    }

image.png

总结:

1、跑的快就是因为使用了BufferedReader

题解3

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine().toLowerCase();
        String str1 = br.readLine().toLowerCase();
        String substring = str1.substring(0, 1);
        System.out.print(str.length() - str.replaceAll(substring, "").length());
    }
}

image.png