牛客華為機試HJ10
阿新 • • 發佈:2022-03-24
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)