如何解决在 java 中查找字符串中的第一个非重复字符?
有多种方法可以找到它。 他们之中有一些是:
使用LinkedHashMap 使用 indexOf 和 lastIndexOf 方法。
面试问题之一是“你将如何在 String 中找到第一个非重复字符。” 例如: 如果输入字符串是“analogy”,那么程序应该返回’n’ 如果输入字符串是“easyest”,那么程序应该返回’a’ 第一种方法: 我们将使用 LinkedHashMap 在 String 中查找第一个非重复字符。
Algorithm: 循环遍历字符串时获取字符 将此字符放入 LinkedHashMap 中并计数。如果字符已经存在,则将计数增加 1。 迭代时从 LinkedHashMap 获取计数。如果计数为 1,则返回该字符,因为 LinkedHashMap 维护插入顺序。 程序:
package org.arpit.java2blog.algo;
import java.text.*;
import java.util.*;
import java.util.Map.Entry;
public class GetFirstNonRepeatingCharacterMain {
public static void main(String[] args) {
System.out
.println("First non repeated character for String analogy is : "
+ getNonRepeatedCharacter("analogy"));
System.out
.println("First non repeated character for String easiest is : "
+ getNonRepeatedCharacter("easiest"));
}
public static Character getNonRepeatedCharacter(String str) {
Map<Character, Integer> countCharacters = new LinkedHashMap<Character, Integer>();
for (int i = 0; i < str.length() - 1; i++) {
Character c = str.charAt(i);
if (!countCharacters.containsKey(c)) {
countCharacters.put(c, 1);
} else {
countCharacters.put(c, countCharacters.get(c) + 1);
}
}
// As LinkedHashMap maintains insertion order, first character with
// count 1 should return first non repeated character
for (Entry<Character, Integer> e : countCharacters.entrySet()) {
if (e.getValue() == 1)
return e.getKey();
}
return null;
}
}
当你运行上面的程序时,你会得到以下输出:
First non repeated character for String analogy is : n
First non repeated character for String easiest is : a
第二种方法: 算法: 遍历字符串的每个字符。 如果 lastIndexOf 和 indexOf 返回相同的值,则它是字符串中的第一个非重复字符。 程序:
package org.arpit.java2blog.algo
public class GetFirstNonRepeatingCharacterMain
{
public static void main(String[] args)
{
System.out.println("First non repeated character for String analogy is : "+getNonRepeatedCharacter("analogy"));
System.out.println("First non repeated character for String easiest is : "+getNonRepeatedCharacter("easiest"));
}
public static Character getNonRepeatedCharacter(String str)
{ char charaaray[]=str.toCharArray();
for (int i=0; i<str.length();i++)
{
if (str.lastIndexOf(charaaray[i]) == str.indexOf(charaaray[i]))
return charaaray[i];
}
return null;
}
}
当你运行上面的程序时,你会得到以下输出:
First non repeated character for String analogy is : n
First non repeated character for String easiest is : a
解决方法
在 java 中查找字符串中的第一个非重复字符?