удалить и добавить символ к строковой рекурсии - PullRequest
0 голосов
/ 26 мая 2018

Как сделать символ в рекурсии в конце или в примере:

removeChar ("hello world, let's go!",'l') → "heo word, et's go! Llll"

removeChar("you should not go",'o') → "yu shuld ntоооо "

public static String removeChar(String word, char charToRemove) {
  String char_toremove = Character.toString(charToRemove);
  for (int i = 0; i < word.length(); i++) {
    if (word.charAt(i) == charToRemove) {
      String newWord = word.substring(0, i) + word.substring(i + 1);
      return removeChar(newWord, charToRemove);
    }
  }
  System.out.println(word);
  return word;
}

1 Ответ

0 голосов
/ 26 мая 2018

Скажем, вы звоните removeChar("hello ", 'l'),
, вы в настоящее время удаляете l,
рекурсивно, звоните removeChar("helo ", 'l'),
и просто возвращаете это напрямую.

Во-первых, это не так.оптимальный, потому что теперь он должен сканировать начальные he символов, которые уже были отсканированы.

Во-вторых, не просто возвращайте его напрямую.Добавьте удаленное письмо до конца, прежде чем возвращать результат рекурсивного вызова.

Итак, вместо:

String newWord = word.substring(0, i) + word.substring(i + 1);
return removeChar(newWord, charToRemove);

Вы хотите:

String prefix = word.substring(0, i);
String remain = word.substring(i + 1);
String subst = removeChar(remain, charToRemove);
return prefix + subst + charToRemove;

Илитолько в одну строку:

return word.substring(0, i) + removeChar(word.substring(i + 1), charToRemove) + charToRemove;
...