上面的问题和算法来自GeeksForGeeks
但它需要对数组进行两次扫描。我只想在一次扫描中找到第一个非重复字符。
我实现了上面的算法Please check it also on Ideone:
import java.util.HashMap;
import java.util.Scanner;
/**
*
* @author Neelabh
*/
public class FirstNonRepeatedCharacter {
public static void main(String [] args){
Scanner scan=new Scanner(System.in);
String string=scan.next();
int len=string.length();
HashMap<Character, Integer> hashMap=new HashMap<Character, Integer>();
//First Scan
for(int i = 0; i <len;i++){
char currentCharacter=string.charAt(i);
if(!hashMap.containsKey(currentCharacter)){
hashMap.put(currentCharacter, 1);
}
else{
hashMap.put(currentCharacter, hashMap.get(currentCharacter)+1);
}
}
// Second Scan
boolean flag=false;
char firstNonRepeatingChar = 0;
for(int i=0;i<len;i++){
char c=string.charAt(i);
if(hashMap.get(c)==1){
flag=true;
firstNonRepeatingChar=c;
break;
}
}
if(flag==true)
System.out.println("firstNonRepeatingChar is "+firstNonRepeatingChar);
else
System.out.println("There is no such type of character");
}
}
GeeksforGeeks还建议使用有效的方法,但我认为这也是两次扫描。以下解决方案来自GeeksForGeeks
最佳答案
您可以存储2个数组:每个字符的计数和第一次出现的次数(并在第一次扫描时将它们都填满)。然后第二次扫描将是不必要的。
关于algorithm - 给定字符串,仅一次扫描即可找到其第一个非重复字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26750939/