编码蝙蝠递归练习(java)

San*_*ofa 2 java string recursion

如何以递归方式而不是使用替换方法来解决此问题?我正在努力改进递归方法。

给定一个字符串,递归(无循环)计算一个新字符串,其中所有小写的“x”字符都已更改为“y”字符。

changeXY("codex") ? "codey"
changeXY("xxhixx") ? "yyhiyy"
changeXY("xhixhix") ? "yhiyhiy"
Run Code Online (Sandbox Code Playgroud)

我就是这样作弊解决的,试图查看Java String方法replace的源码,但是没看懂。这是我的方法。

public String changeXY(String str) {
  int len = str.length();
  int i = 0;
  String changedStr = str.replace("x","y");


  if (len == 0)
    return str;

  return changedStr;

}
Run Code Online (Sandbox Code Playgroud)

关于如何以递归方式做到这一点的任何想法?

这是一个额外的练习,我也不知道该怎么做。感谢您的帮助!!!

给定一个字符串,递归计算一个新字符串,其中所有 'x' 字符都已被删除。

noX("xaxb") ? "ab"
noX("abc") ? "abc"
noX("xx") ? ""
Run Code Online (Sandbox Code Playgroud)

Reu*_*ani 5

递归几乎总是由两件事组成:

停止递归的条件。

假设我们可以解决一个较小的问题,如何使用该假设解决当前的问题。

public String changeXY(String str) {

  // when to stop
  if (str.length() == 0){
    return str;
  }

  // handle the "special case" using an assumption we can solve str.substring(1)
  if (str.charAt(0) == 'x'){
    return 'y' + changeXY(str.substring(1));
  }
  // handle the "simple" case using an assumption we can solve str.substring(1)
  return str.charAt(0) + changeXY(str.substring(1));
}
Run Code Online (Sandbox Code Playgroud)

一旦你意识到这是如何工作的,其他练习就非常容易了。