上面的问题和算法来自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/

10-11 00:10