为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中编写静态递归方法?

如何在Java中编写静态递归方法?

MYYA 2022-09-28 14:52:00
我想在Java中使用静态递归方法编写代码,cleanString(字符串),它接受一串字母s并返回一个字符串,其中相邻的相同字母被该字母的单个匹配项替换。该方法区分大小写。例如:cleanString("sensssaatiionnaallll!") -> "sensational!"                             cleanString("PPProoggggraamm") -> "Program"cleanString("Lletterriiing") -> "Lletering"
查看完整描述

4 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

试试这个:


public class Main {

    public static void main(String[] args) {

        System.out.println(cleanString("sensssaatiionnaallll!"));

    }

    static String cleanString(String input)

    {

        if(input.length()<1) //To stop infinite recursion

            return input;

        var first = input.charAt(0);

        var count = input.chars().takeWhile(x -> x == first).count();

        return first + cleanString(input.substring((int)count));

    }

}

  • 首先,它检查字符串的长度是否小于 1。如果是,则返回字符串本身(为空)并停止递归。

  • 接下来获取字符串的第一个字符。(例如PPProoggggraamm -> P)

  • 获取开头等于第一个字符的字符数(在以下情况下为 3)PPProoggggraamm)

  • 再次调用该函数,但这次从上述步骤中剔除前 n 个字符,并在第一个字符之前添加。('P' + cleanString("rooggggraamm"))


查看完整回答
反对 回复 2022-09-28
?
波斯汪

TA贡献1811条经验 获得超4个赞

它只是生成一个新的字符串并排除重复字符。


static String cleanString(String input) {

  if(input == null) return null;


  char lastChar = 0;

  StringBuilder output = new StringBuilder(input.length());

  for (int i=0,n=input.length(); i<n; i++) {

    char c = input.charAt(i);

    if(c != lastChar) {

      lastChar = c;

      output.append(c);

    }

  }


  return output.toString();

}

递归方法:


public class Example {

  public static int main(String[] args) {

    String input = "sensssaatiionnaallll";

    String output = cleanString(input, 0);

    System.out.println(output); // print: sensational

    return 0;

  }


  private static String cleanString(String input, int index) {

    if(input == null) return "";

        if(index >= input.length()) return "";


        StringBuilder output = new StringBuilder();


        char current = input.charAt(index);


        int nextIndex = index + 1;

        if(nextIndex >= input.length()) {

            return output.append(current).toString();

        }


        char next = input.charAt(nextIndex);


        if (current != next) {

            output.append(current);

        }


        output.append(cleanString(input, nextIndex));


        return output.toString();

  }

}


查看完整回答
反对 回复 2022-09-28
?
喵喔喔

TA贡献1735条经验 获得超5个赞

用于从输入字符串中删除相邻字符的最短递归代码。


public class StackOverflow { 


static String cleanString(String input) {

    return input==null || input.length()<=1?input:cleanStringWrapper(input.substring(1),input.substring(0,1));

}


static String cleanStringWrapper(String input, String result) {

  if (input.length() - 1 <= 0) {

    return result+(result.charAt(result.length() - 1)!=input.charAt(0)?input:"");

} else {

    return cleanStringWrapper(input.substring(1), result+(result.charAt(result.length() - 1) != input.charAt(0)?input.charAt(0):""));

}


 public static void main(String[] args) 

 {

     System.out.println(cleanString("OOPS"));

     } 

 }

输出:

干净弦(“感官”)->“耸人听闻!

清洁字符串(“PPProoggggraamm”) -> “程序”

干净弦(“莱特里林”) -> “莱特林”

干净弦(“咕噜咕噜”) ->“咕噜”

干净弦(“ABC”) -> “ABC”

干净字符串(“A”) -> “A”

干净字符串(“”) -> “”

干净字符串() -> 


查看完整回答
反对 回复 2022-09-28
?
米脂

TA贡献1836条经验 获得超3个赞

为什么要为此制作静态方法?

据我所知,您要从输入字符串中删除重复的字符。

您也可以在代码下进行操作。

StringBuilder sb = new StringBuilder();
str.chars().distinct().forEach(c -> sb.append((char) c));

如果你愿意,你可以把这两行的方法作为代码中的一个功能。

希望这有帮助!


查看完整回答
反对 回复 2022-09-28
  • 4 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号