1. 程式人生 > 其它 >牛客華為機試HJ10

牛客華為機試HJ10

原題傳送門

1. 問題描述

2. Solution

1、思路分析
用陣列做自定義雜湊表,所有ASCII碼的長度為128,記錄出現過的字元。最後遍歷陣列求和,即為所求。

2、程式碼實現
Java實現

package huawei.HJ010;

import java.io.IOException;
import java.nio.file.Paths;
import java.util.Scanner;

public class Main {
    static Scanner in;

    public static void main(String[] args) throws IOException {
        if (!"Linux".equals(System.getProperty("os.name"))) {
            in = new Scanner(Paths.get("/Users/jun/Learn/JavaLearning/NowCoder/src/huawei/HJ010/input.txt"));
        } else {
            in = new Scanner(System.in);
        }
        while (in.hasNext()) {
            String s = in.nextLine();
            solve(s);
        }
    }

    private static void solve(String s) {
        int[] seen = new int[128];
        int result = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (seen[c] == 1)
                continue;
            seen[c] = 1;
        }
        for (int j : seen) result += j;
        System.out.println(result);
    }
}

Python實現

import sys

if sys.platform != "linux":
    sys.stdin = open("input/HJ10.txt")

s = input().strip()
seen = [0] * 128
for c in s:
    idx = ord(c)
    seen[idx] += 1

print(len(seen) - seen.count(0))

3、複雜度分析
時間複雜度: O(n)
空間複雜度: O(1)