2017-11-20 9 views
-2

私はプログラミングに慣れていない、私は文字列で開発している、私はまだハッシュマップではない私の唯一の問題は最後の文字です。たとえば、最後の文字■値に2が含まれています。どうやってやるの?文字列で重複を数える方法は?

public static void main(String[] args) { 

    String word = "Chris", 
     curr_char, 
     next_char; 
    int length_string = word.length(), 
     count = 0; 
    char end_letter = word.charAt(word.length()-1); 
    String end = Character.toString(end_letter); 
    for(int index = 0; index < word.length(); index++) 
    { 
     curr_char = word.substring(index, index+1); 

     for(int next_index = 0;next_index<word.length(); next_index++) 
     { 
      next_char = word.substring(next_index, next_index+1); 
      if (curr_char.equalsIgnoreCase(next_char)) 
      { 
       count = 1; 
      } 
      if(curr_char.contains(end)) 
      { 
       count = count + 1; 
      } 
     } 
     System.out.println(word.charAt(index) + " " + count); 
    } 
} 
+1

たとえば、最後の文字s値に2が含まれています。私はその部分を理解しているかどうかわかりません。問題の完全な説明を与えるために[mcve]を提案してください。 – AxelH

+0

あなたが尋ねていることは不明です。より多くの文脈を提供してください。 –

+0

[mcve] [mcve] [mcve] – GhostCat

答えて

-1

このコードは、今完璧に実行されます。

public static void main(String args[]) { 

String word = "Chris" , curr_char , next_char; 
int length_string = word.length(); 
char end_letter = word.charAt(word.length()-1); 
String end = Character.toString(end_letter); 

for(int index = 0; index <word.length(); index++) 
{ 
    int count = 0; //resetting the value of count every time 
    curr_char = word.substring(index, index+1); 


    for(int next_index = 0;next_index<word.length(); next_index++) 
    { 
    next_char = word.substring(next_index, next_index+1); 
    if (curr_char.equalsIgnoreCase(next_char)) 
    { 
    count = count + 1; 
    //if any character repeats it increase the value of count 
    } 

} 
System.out.println(word.charAt(index) + " " + count); 
} 

} 

テストこの度...

+0

あなたは何をしましたか?なぜ、これは少なくとも変更されたコードを指すことによって説明されるべきです。 OPはこれからも学ぶ必要があります。もっと完成させるために答えを編集してください。 – AxelH

+0

あなたは彼に魚を教えるよりもむしろ男に魚を与えました。 – byxor

+1

待ち人、私は今このコードを説明しようとしていた –

0

あなたは、アルゴリズムのロジックでいくつかの問題を持っています。アルゴリズムは、 "Chriss"や "Chcriss"のような文字列では機能しません。 "Chrissは"

C 1
時間1
R 1
I 1
の2
S 1

また、あなたが作る2回の反復を、持っているだろう、入力文字列を使用して出力アルゴリズムはあまり効率的ではありません。効率的なアルゴリズムは、より少ない時間(高速)&より少ないスペース(より少ないメモリ)を取るべきである。

上記の問題は、通常英語のアルファベットに26文字あるため、整数配列、たとえばcharArrayCountのサイズが26であることによって解決されます。この整数配列の各要素は、アルファベットの文字を表します。&は、文字列に何回出現するかを数えます。あなたは「CH」は、あなたの文字列の文字になり

を、数式を使用し、あなたの文字列内の各文字を通じて&を繰り返す

charArrayCount[25 - ('z' - ch)] += 1; 
でしょう。 'charArrayCount' &これらの値を取得するには、大文字の&小文字を処理する必要があります。

この場合、文字列の長さがたとえ千文字であっても、文字列&を1回だけ繰り返すと、26個の要素の整数配列のためのスペースが作成されます。

お試しください&こちらが役立つかどうかをご覧ください。

関連する問題