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