2016-09-26 11 views
-5

私は以下の問題https://www.hackerrank.com/challenges/reduced-stringに取り組んでいます。Hackerrank string reduction

私は上記の問題を再帰的に解決したいです。私のコードは以下の通りです。

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 
    public static void main(String[] args) throws Exception { 
     BufferedReader br = new BufferedReader(neInputStreamReader(System.in)); 
     String line = br.readLine(); 
     System.out.print(reduce(line)); 
    } 

    public static String reduce (String str) { 
     if (str.equals("")) return "Empty String"; 
     if (str.length()<2) return str; 
     if (str.charAt(0) == str.charAt(1)) return reduce(str.substring(2)); 
     return str.charAt(0) + reduce(str.substring(1)); 
    } 
} 

上記のコードは、次のテストケースのために失敗した
BAAB

はいずれも私のコードに問題が何であるかを指摘してもらえますか?

+2

[デバッガとは何ですか?また、どのようにして問題を診断するのに役立ちますか?](http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it- help-me-diagnose-problems) – Raedwald

+1

これはデバッグサイトではありません。 – sashas

+2

**私たちがあなたを助けてくれるようにするには、**機能しません**は説明が不十分です。 – GhostCat

答えて

0

あなたの問題があることです。たとえ後のある時点で実際にそれを取り除くことができたとしても、あなたは再びそれを見ることはありません。

私はあなたの代わりにこのような何かができたとします

public static String reduce(String str){ 
    if(str.equals("")) 
     return "Empty String"; 
    if(str.length()<2) 
     return str; 
    if(str.charAt(0)==str.charAt(1)) 
     return reduce(str.substring(2)); 

    String rest = str.substring(1); 
    String reducedRest = reduce(rest); 

    if (rest.equals(reducedRest)) 
     return str; 
    else 
     return reduce(str.charAt(0) + reducedRest); 
} 

それは素晴らしいではありませんが、それはあなたの一般的な考えを示すべきであるが。残りの部分を変更しないと、最初の文字は無視されます。あなたがそれを変更した場合、あなたは再びすべてを見る必要があります。

+0

ありがとうございます@マーク – Learner

+0

これを行うのが最も効率的な方法ではないことに注意してください。 reducedRestが実際に縮小された場合(実際に縮小されたという意味)、技術的には最初の2文字を削除できるかどうかを確認するだけです。しかし、あなたがそれらを削除することができるかどうかは、実際には残りの文字列を再チェックする必要はありません。 – Mark

0

str.charAt(0)+reduce(str.substring(1));

charAt(0)場合は、str.substring(1)の最初の文字と等しくなりますか?あなたは減らされていないペアで終わります。あなたはすぐにもうそれを削除することはできませんまで

reduce("baab") = 'b' + reduce("aab") = 'b' + reduce("b") = 'b' + 'b' = "bb" 

あなたは、あなたの最初の文字を見て: