当前位置: 首页 > 面试题库 >

递归将char移动到字符串的末尾

刘升
2023-03-14
问题内容

我需要获取一个字符串,并通过获取char来递归地重新排列它,并按该char的形式将字符串上的char移到末尾,例如“ Hello
world!”。,’l’=>“ Heo word!lll”我在理解递归思维方式时遇到了问题,所以我从这里开始:

public static String ChToLast (String str, char ch){
    if(str.indexOf(ch)== -1){
        return str;
    }else{
        if(str.indexOf(0) == ch){
            return str;
        }
    }

谢谢您的帮助 :)


问题答案:

递归是在内部重用方法的实践。在这种情况下,我将提供一个解决方案来解释发生的情况:

public static String chrToLast(String str, char ch) {
    //This if statement details the end condition
    if(str.length() < 1) {
        return "";
    }

    String newString = str.substring(1); //Create new string without first character

    if(str.indexOf(ch) == 0) { //This happens when your character is found
        return chrToLast(newString, ch) + ch;
    } else { //This happens with all other characters
        return str.charAt(0) + chrToLast(newString, ch);
    }
}

如果执行:

chrToLast("Hello, World!", 'l')

这将产生所需的结果: Heo, Word!lll

处理

通常,此方法通过检查当前哪个字符是给定字符串中的第一个字符,然后确定要做什么来起作用。如果第一个字符与您要查找的(l)相同,则它将从字符串中删除该字符并chrToLast
新字符串上使用 。但是,它还会通过使用将找到的字符添加到结果的末尾+ ch。它将继续执行此操作,直到没有剩余的字符为止,这是 结束条件
的作用。

结束条件

结束条件返回一个空字符串,""因为这就是算法基本情况 。您可以将递归算法视为通过多次调用自身来解决问题的方法。通过调用自己,递归算法趋于
base
。在这种特殊情况下,它是通过每次执行该方法时从字符串中减去一个字符来实现的。一旦没有字符,它就会到达基本情况"",即字符串最终为空,并且不再可以减去任何字符。(因此,它不返回任何最终状态)

我希望这回答了你的问题。了解这一概念非常重要,因为它非常强大。尝试研究代码并注释一些不清楚的地方。

通过在IDE中执行此代码并使用调试器逐步执行该代码,也可以有所帮助。然后,您可以自己查看程序的流程,并查看正在运行的变量的值。



 类似资料:
  • 问题内容: 我对此感到困惑,我需要一些新鲜的眼睛,我不确定为什么这段代码会这样做。 输出是直到最后一个数字(0xFC)返回-4为止的所有内容,我知道它是一个十六进制值,但是如果我对252的十进制值也一样,它也会给我一个负数。我希望这只是一个简单的解决方案,我看不到它。 提前谢谢。 问题答案: 字符串到char数组很简单 您能否再解释一下您要做什么? 更新 如果我理解您的新评论,则可以使用字节数组,

  • 本文向大家介绍C#实现移除字符串末尾指定字符的方法,包括了C#实现移除字符串末尾指定字符的方法的使用技巧和注意事项,需要的朋友参考一下 字符串的操作是C#程序设计中十分重要的一个组成部分,本文就以实例形式展现了C#实现移除字符串末尾指定字符的方法。相信对大家学习C#程序设计有一定的借鉴价值。 关键代码如下: 单元测试如下: 测试结果如下图所示:

  • 问题内容: 我正在尝试查找字符串中字母的首次出现。例如,苹果中的p应该返回1。这是我拥有的: 它似乎似乎没有返回正确的值。 问题答案: 您的尝试很好,但是还不够。这是基于您的正确实现: 您的尝试存在两个问题: 在这一部分中,您已经找到了角色,因此正确的做法是停止递归,但您仍在继续。 在最后一个return语句中,您需要在递归调用中加1(如果最终找到了该字符),作为累加总索引号的一种方式。

  • 我正在编写一个递归过程来返回字符串的排列 我将所需的输出打印到控制台。但是,我希望将输出添加到一个数组中,以便能够对其进行进一步的处理。怎么才能实现? 我得到:[ABCD][ABDC][ACBD][ACDB][ADBC][ADCB] 我想要:[ABCD、ABDC、ACBD、ACDB、ADBC、ADCB,]

  • 当读取文件时,将关键字flagstop、wb、nb、sb、eb从名称的开头移动到停止名称的结尾,例如“wb HASTINGS ST FS HOLDOM AVE”变为“HASTINGS ST FS HOLDOM AVE wb”。 到目前为止,我已经获得了如下所示的读取文件的代码,但我不确定如何将数组中的字符串关键字移动到字符串的结尾,给出了上面所示的条件。我需要能够移动第一个字在停止[2]如果它是上

  • 问题内容: 这是一个非常简单的问题,但是我需要另一只眼睛来查看我的代码: 输出为: 这些字符是什么, 您有什么想法 吗? 问题答案: 这就是数组的实现方式。 的是字符数组表示,是它的哈希码。 您可能想看看 如果您想再次看到原始的String,则需要: