Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

recursion moving char to the end of the string

i need to get a string and rearrange it with recursion by getting char and by that char i have to move that char everywhere on the string to the end like "Hello world!" ,'l' => "Heo word!lll" i have problems understading the recursion way of thinking so i started with this:

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

thank you for your help :)

like image 998
Escaban Avatar asked Nov 28 '25 19:11

Escaban


1 Answers

Recursion is the practise of reusing your method inside itself. In this case, I will provide a solution to explain what happens:

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);
    }
}

If you execute:

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

This will result in the desired result: Heo, Word!lll

Process

In general, this method works by checking which character is currently the first in the given string, and then deciding what to do. If the first character is the same as the one your looking for (l), it will then remove that character from the string and use chrToLast on that new string. But, it also adds the character it found to the end of the result by using + ch. It continues to do this until there are no more characters left, which is what the end condition is for.

The end condition

The end condition returns an empty string "" because that is what is called the base case of the algorithm. You can think of a recursive algorithm as something solving a problem by calling itself a number of times. By calling themselves, recursive algorithms move towards a base. In this particular case, it does that by subtracting one character off the string each time the method is executed. Once there are no characters left, it reaches the base case which is "", where the string is finally empty and no characters can be subtracted anymore. (Hence it returns nothing as it's final state)

I hope this answers your question. It's important to understand this concept, as it is very powerful. Try to study the code and comment if something's not clear.

Something that can also help is by executing this code in an IDE and using the debugger to walk through its execution. You can then see for yourself what the flow of the program is, and see the value of the variables in play.

like image 180
NocNit Avatar answered Dec 01 '25 08:12

NocNit