安全プランを証明する:最初の言葉は一度だけ表示されます

トピック:文字の文字列の最初のは1度だけ表示して下さい。入力 "abaccdeff"、出力 'B'。

    このタイトルを参照してください、私たちの最も直感的なアイデアは、文字の文字列をスキャンし、最初から開始することです。文字の後ろがない場合は、繰り返し文字と比較した各文字と文字の後ろを取るために、文字にアクセスすると、文字は一度だけ表示されています。文字列にn個の文字場合は、時間の複雑さのこのアイデアはO(N2)であるので、各文字は、O(n)の文字を比較したいの背中に関連している可能性があり、面接は思考のこの行に満足されることはありません、彼はに求めるメッセージが表示されます私たちは、より高速な思考を続けていきたいです。

    この問題を解決するために、我々は、キーハッシュテーブル(キー)を定義することができ、文字、および値(バリュー)は、回文字が表示されますの数です。また、二度、文字列のスキャンを開始する必要があります。最初のスキャン文字列は、各文字は、対応する項目番号にハッシュテーブルに走査されるときに1秒だけ増加され、次のスキャンは、各走査文字がハッシュテーブルから取得することができます文字の出現回数。まず、このような文字が表示され、出力の要件を満たす唯一のものです。

    チャーは、256文字の合計8ビットタイプであるため、単純なハッシュテーブルは、要件を満たすことができるようになり得ます。我々は長さ256のアレイを作成するように、アレイのアレイ、及び数の添え字に対応するASCIIコードとして、その値に応じて各文字は、各文字が現れるためのアレイに記憶されます。だから我々は、キーハッシュテーブル用のASCII文字コードに256のサイズを作成しました。 

    ハッシュテーブルは、時間はO(1)で表示される文字の数を更新します。文字列の長さがNである場合、スキャン時間複雑度はO(N)である。同時に、補助アレイ256含む文字を必要とします、

import java.util.Scanner;


public class one{

	/**
	 * @param args
	 */
	public static char FindChar(String str){
      if(str == null){
        
         return '.';
      }
      int[] hash = new int[256];//初始化hash数组
      for(int i =0;i<hash.length;i++){
          hash[i]=0;
      }
      for(int i =0;i<str.length();i++){
         hash[str.charAt(i)] ++;
      }
      for(int i=0;i<str.length();i++){
         if(hash[str.charAt(i)] == 1)
        	 return str.charAt(i);
      }
      return '.';
   }

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        String str=in.next();
        System.out.println(FindChar(str));
	}

}



スペースの複雑さはO(1)であります

公開された118元の記事 ウォン称賛35 ビュー120 000 +

おすすめ

転載: blog.csdn.net/abc7845129630/article/details/52740646