2013-12-05 5 views
0

Пожалуйста, помогите мне определить мои ошибки в этом коде. Я новичок в Java. Извините, если я допустил ошибку. Это один из вопросов java-кодирования. Я получаю сообщение об ошибке Timed Out для некоторых входов типа «xxxyakyyyakzzz». Для некоторых входов, таких как «якпак» и «пакьяк», этот код работает нормально.Может кто-нибудь помочь мне исправить следующий код?

Вопрос: Предположим, что строка "yak" не повезла. С учетом строки верните версию, где все «як» удалены, но «a» может быть любым символом. Строки «як» не будут перекрываться.

public String stringYak(String str) { 
       String result = ""; 
       int yakIndex = str.indexOf("yak"); 
       if (yakIndex == -1) 
        return str; //there is no yak 
       //there is at least one yak 
       //if there are yaks store their indexes in the arraylist 
       ArrayList<Integer> yakArray = new ArrayList<Integer>(); 
       int length = str.length(); 
       yakIndex = 0; 
       while (yakIndex < length - 3) { 
        yakIndex = str.indexOf("yak", yakIndex); 
        yakArray.add(yakIndex); 
        yakIndex += 3; 
       }//all the yak indexes are stored in the arraylist 
       //iterate through the arraylist. skip the yaks and get non-yak substrings 
       for(int i = 0; i < length; i++) { 
        if (yakArray.contains(i)) 
         i = i + 2; 
        else 
         result = result + str.charAt(i); 
       } 
       return result; 
} 
+2

Какая ошибка вы получаете? – Renjith

+1

Поделитесь данными, которые вы дали, и ожидали, и фактический вывод. Таким образом, вам может помочь. –

+0

Почему вы не используете replaceAll для удаления всех 'yak'? – Masudul

ответ

0

Не следует ли искать три символьные последовательности, начинающиеся с «y» и заканчивающиеся на «k»? Вот так?

public static String stringYak(String str) { 
    char[] chars = (str != null) ? str.toCharArray() 
     : new char[] {}; 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < chars.length; i++) { 
    if (chars[i] == 'y' && chars[i + 2] == 'k') { // if we have 'y' and two away is 'k' 
                // then it's unlucky... 
     i += 2; 
     continue; //skip the statement sb.append 
    }   //do not append any pattern like y1k or yak etc 
    sb.append(chars[i]); 
    } 
    return sb.toString(); 
} 

public static void main(String[] args) { 
    System.out.println(stringYak("1yik2yak3yuk4")); // Remove the "unlucky" strings 
                // The result will be 1234. 
} 
+0

«a» может быть каждый персонаж, вы сказали – worcin

+0

Что значит «а» может быть любым символом? –

+0

@ ElliottFrisch Спасибо за ваше решение. Я правильно понял вопрос сейчас. Но можете ли вы исправить мой код, учитывая, что удаляются только «яки». –

0

Похоже на ваше назначение программирования. Вам нужно использовать регулярные выражения.

Дополнительную информацию смотрите на странице http://www.vogella.com/articles/JavaRegularExpressions/article.html#regex. Помните, что вы не можете использовать содержит. Ваш код может быть что-то вроде

result = str.removeall("y\wk") 
Смежные вопросы