在 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
本文向大家介绍在JavaScript中查找字符串的第一个非重复字符,包括了在JavaScript中查找字符串的第一个非重复字符的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数将字符串作为第一个也是唯一的参数。 该函数应该找到并返回它在字符串中遇到的第一个字符的索引,该字符串在字符串中仅出现一次。 如果字符串不包含任何唯一字符,则函数应返回-1。 例如- 如
本文向大家介绍Java程序查找的字符流的第一个非重复的字符,包括了Java程序查找的字符流的第一个非重复的字符的使用技巧和注意事项,需要的朋友参考一下 要从字符流中找到第一个非重复字符,Java代码如下- 示例 输出结果 名为Demo的类包含一个名为“non_repeating_char的函数。 创建一个列表并定义一个字符串。 重复此字符串,检查每个字符,并将其计数以布尔变量的形式存储在名为“ r
为什么下面的方法只检查提供的字符串中的第一个字符? 例如,以下字符串返回false:“abc”但“abc”返回true。
如何检查一个字符串是否在另一个字符串中,但匹配项需要在前面,而不是中间或最后。例如,a="
我必须定义一个包含大写方法的Translator类。该方法将收到一个StringBuffer,它只包含英文字母和空格,并将更改它,以便每个单词都以大写字母开头。 //我需要定义的类
我对RegEx-es和类似的搜索模式非常缺乏经验,而且我所尝试的每一种方法都不能正常工作(大多数情况下会导致)。 找到字符串中最后一组数字开始的索引的可靠而简单的方法是什么?