永乐大典全书2877卷,11095册,约3.7亿个字;现用一台2G内存4核CPU的电脑尽可能快的找出书中第一个不重复的字符,Java代码实现
时间: 2023-05-30 12:01:58 浏览: 73
由于需要快速地找出第一个不重复的字符,我们可以使用哈希表来存储每个字符出现的次数。具体的实现步骤如下:
1. 首先读入永乐大典全书的文本内容,并将其转化为一个字符串。
2. 创建一个哈希表,用于存储每个字符出现的次数。
3. 遍历字符串中的每个字符,将其加入哈希表中。如果该字符已经在哈希表中出现过,则将其对应的值加1;否则,将其加入哈希表中,并将其对应的值设为1。
4. 再次遍历字符串中的每个字符,查找其在哈希表中对应的值。如果该值为1,则说明该字符是第一个不重复的字符,直接返回即可。
5. 如果遍历完整个字符串都没有找到第一个不重复的字符,则返回空字符。
下面是具体的Java代码实现:
```java
import java.util.HashMap;
public class FirstNonRepeatedChar {
public static char findFirstNonRepeatedChar(String str) {
// 将字符串转换为字符数组
char[] chars = str.toCharArray();
// 创建哈希表,用于存储每个字符出现的次数
HashMap<Character, Integer> charCounts = new HashMap<>();
// 遍历字符数组,将字符加入哈希表中
for (char c : chars) {
if (charCounts.containsKey(c)) {
// 如果该字符已经在哈希表中出现过,则将其对应的值加1
int count = charCounts.get(c);
charCounts.put(c, count + 1);
} else {
// 否则,将其加入哈希表中,并将其对应的值设为1
charCounts.put(c, 1);
}
}
// 再次遍历字符数组,查找第一个不重复的字符
for (char c : chars) {
if (charCounts.get(c) == 1) {
return c;
}
}
// 如果遍历完整个字符数组都没有找到第一个不重复的字符,则返回空字符
return '\0';
}
public static void main(String[] args) {
// 读入永乐大典全书的文本内容
String text = "...";
// 查找第一个不重复的字符
char firstNonRepeatedChar = findFirstNonRepeatedChar(text);
System.out.println("第一个不重复的字符是:" + firstNonRepeatedChar);
}
}
```