/**
* @author zhang yin ye
* @date 2014 6 20
* @topic 如何在字符串中找到第一个不重复的字符
* 三种方法实现
*/
package ustc.zyy.ArrayList;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
//如何在字符串中找到第一个不重复的字符
public class FirstNonRepeatedChar {
public static char getFirstNoRepeatChar1(String str) {
// 使用LinkedHashMap可以记住元素的插入顺序
Map<Character, Integer> map = new LinkedHashMap<Character, Integer>(
str.length());
for (char c : str.toCharArray()) {
// 以字符作为k 出现的个数作为值
map.put(c, map.containsKey(c) ? map.get(c) + 1 : 1);
}
// 遍历MAp 找到第一个值为1的就是找的结果
for (Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1)
return entry.getKey();
}
throw new RuntimeException("没有找到相关的字符");
}
public static char getFirstNoRepeatChar2(String str) {
// 保存重复的元素
Set<Character> repeating = new HashSet<Character>();
// 保存不重复的元素
List<Character> noRepeating = new ArrayList<Character>();
for (int i = 0; i < str.length(); i++) {
// 遍历字符串
char letter = str.charAt(i);
// 集合里已经包含了元素的时候 跳过这个元素
if (repeating.contains(letter)) {
continue;
}
// 在不重复地方集合里包含了元素的时候删除这个元素
if (noRepeating.contains(letter)) {
noRepeating.remove((Character) letter);
repeating.add(letter);
} else {
noRepeating.add(letter);
}
}
// 返回不重复的第一个就可以了
return noRepeating.get(0);
}
public static char getFirstNoRepeatChar3(String str) {
// 用HashMap来存储元素和个数
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
// 要是集合里有的话 就加一
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
// 没有的话 就存储
map.put(c, 1);
}
}
// 遍历集合找到值为一的就是要找的元素
for (int j = 0; j < str.length(); j++) {
char b = str.charAt(j);
if (map.get(b) == 1)
return b;
}
throw new RuntimeException("没有找到");
}
}
java实现如何在字符串中找到第一个不重复的字符
最新推荐文章于 2023-06-15 17:41:17 发布