Java程序在给定字符串中查找第一个非重复字符
时间:2020-01-09 10:35:33 来源:igfitidea点击:
这篇文章展示了在Java中找到给定String中第一个非重复字符的方法。例如,如果给定的字符串为" abcdcab",则第一个非重复字符为d。
有很多选择可以编写Java程序来查找给定String中的第一个非重复字符的选项,其中一些如下。
- 使用LinkedHashMap
- 使用String类的indexOf()方法
- 无需使用任何内置的Java方法,即可编写自己的逻辑。
使用LinkedHashMap查找第一个非重复字符
在使用LinkedHashMap的解决方案中,我们可以按字符迭代String字符,并将其作为(键,值)对存储在映射中,其中character是键,其计数是value。对于每个字符,请检查LinkedHashMap中的密钥是否已存在;如果存在,则增加其计数;否则将其存储为1.
一旦所有字符都存储在映射中,则迭代映射以查找值为1的第一个键。这将是第一个非重复字符。这里使用LinkedHashMap是因为它维护了插入顺序,如果我们需要String中的第一个非重复字符,该顺序将有所帮助。
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
public class NonRepeatedChar {
public static void main(String[] args) {
String str = "abcdcab";
Map<Character, Integer> charMap = storeInMap(str);
char c = findCharInMap(charMap);
if(c != ' '){
System.out.println("First non repeated char in "+ str + " is " + c);
}
}
private static Map<Character, Integer> storeInMap(String str){
Map<Character, Integer> charMap = new LinkedHashMap<Character, Integer>();
for(int i = 0; i < str.length(); i++){
Character c = str.charAt(i);
if(charMap.containsKey(c)){
charMap.put(c, charMap.get(c) + 1);
}else{
charMap.put(c, 1);
}
}
return charMap;
}
private static char findCharInMap(Map<Character, Integer> charMap){
for(Entry<Character, Integer> entry : charMap.entrySet()){
// Find first char with count 1
if(entry.getValue() == 1){
return entry.getKey();
}
}
return ' ';
}
}
输出:
First non repeated char in abcdcab is d
使用indexOf()方法查找第一个非重复字符
我们还可以使用String类的indexOf()和lastIndexOf()方法来查找给定String中的第一个非重复字符。由于indexOf()返回给定字符第一次出现的索引,而lastIndexOf()返回String中给定字符最后一次出现的索引,因此两个方法返回的索引相等的字符将是第一个非重复字符。
public class NonRepeatedChar {
public static void main(String[] args) {
String str = "juju";
findUsingIndex(str);
findUsingIndex("jejune");
}
private static void findUsingIndex(String str){
Character c = null;
boolean flag = false;
for(int i = 0; i < str.length(); i++){
c = str.charAt(i);
if(str.indexOf(c) == str.lastIndexOf(c)){
flag = true;
break;
}
}
if(flag){
System.out.println("First non repeated char in "+ str + " is " + c);
}else{
System.out.println("non repeated char not found in "+ str);
}
}
}
输出:
non repeated char not found in juju First non repeated char in jejune is u
在不使用任何内置Java方法的情况下查找第一个非重复字符
如果要求我们在任何采访中不使用任何内置Java方法来解决此问题,则可以使用给定的逻辑。
在外部循环中,我们将逐个字符地迭代字符串,在内部for循环中,我们将再次对String进行迭代,并将外部循环中的字符与字符串的所有字符进行比较。如果找到匹配项,则表示该字符重复,如果找不到该字符,则该字符为非重复字符。
public class NonRepeatedChar {
public static void main(String[] args) {
String str = "juju";
findNonRepeated(str);
findNonRepeated("jejune");
}
private static void findNonRepeated(String str){
//Character c = null;
boolean foundFlag = false;
for(int i = 0; i < str.length(); i++){
foundFlag = true;
char c = str.charAt(i);
for(int j = 0; j < str.length(); j++){
// If similar char found, also check for the same index
if(c == str.charAt(j) && j != i){
foundFlag = false;
break; // inner for loop
}
}
if(foundFlag){
System.out.println("First non repeated char in "+ str + " is " + c);
break; // outer for loop
}
}
if(!foundFlag){
System.out.println("non repeated char not found in "+ str);
}
}
}
输出:
non repeated char not found in juju First non repeated char in jejune is u

