2017-12-13 8 views
0
public static void bomberAlgo(String str) 
    { 
     String newString=""; 
     String givenString=str; 
     for(int i=0;i<givenString.length()-1;i++) 
     { 
      if(givenString.charAt(i)!=givenString.charAt(i+1)) 
      { 
      newString=newString+givenString.charAt(i); 
      } 
     } 
     System.out.println("The new String is "+str); 
    } 

私のコードは今では2つの同じ文字を削除しています。たとえば、入力文字列が「abcccddefgggh」の場合、出力は「abddefh」になります。文字列から連続する3文字を削除する必要があります。

+0

はあなたが文字列の末尾に到達したとき何が起こるかについて考えたことがありBE-でしょうか?最後の文字の2番目の文字が最後の文字と同じではない場合、それは何をコピーしますか?おそらく出力ではないと確信しています。実際には新しい文字列ではなく元の文字列を表示するからです。出力は毎年どのようになりますか? –

答えて

1

出力するかどうかを決定する前に、文字が何度繰り返されたかを数えます。以下を参照してください:

static String removeConsecutive(String s, int minRepeatsToRemove) { 
    int pos = 0; 
    StringBuilder sb = new StringBuilder(); 

    while (pos < s.length()) { 
     char c = s.charAt(pos); 
     int repeats = 1; 
     while (pos + repeats < s.length() && c == s.charAt(pos + repeats)) 
      repeats++; 

     if (repeats < minRepeatsToRemove) 
      for (int i = 0; i < repeats; i++) 
       sb.append(c); 

     pos += repeats; 
    } 

    return sb.toString(); 
} 

public static void main(String[] args) { 
    System.out.println(removeConsecutive("abcccddefgggh", 3)); 
} 
2

あなたが3つの連続した文字を削除する方法について確実な場合、単純なアプローチは

StringBuffer sb = new StringBuffer(); 
for (int i = 0; i < str.length(); i++) { 
    if(i+2 < str.length() && str.charAt(i) == str.charAt(i+1) && str.charAt(i) == str.charAt(i+2)) { 
      i+=2; 
      continue; 
    } 
    sb.append(str.charAt(i)); 
} 
System.out.println("The new String is "+ sb); 
関連する問題