在Java中递归反转字符串的最佳方法是什么?

2022-09-01 19:45:09

我今天一直在搞砸递归。通常是一种使用不够的编程技术。

我开始以递归方式反转一个字符串。以下是我想出的:

//A method to reverse a string using recursion
    public String reverseString(String s){
        char c = s.charAt(s.length()-1);
        if(s.length() == 1) return Character.toString(c);   

        return c + reverseString(s.substring(0,s.length()-1));
    }

我的问题是:在Java中还有更好的方法吗?


答案 1

最好的方法是不使用递归。这些东西通常用于教学生递归概念,而不是实际的最佳实践。所以你这样做的方式很好。只是不要在Java中使用递归来做现实世界应用程序中的这些东西;)

撇开我刚才说的不谈,我会选择作为递归函数的基本情况:""

public String reverseString(String s){
    if (s.length() == 0) 
         return s;

    return reverseString(s.substring(1)) + s.charAt(0);
}

答案 2

如果你要这样做,你想对一个字符数组进行操作,因为字符串是不可变的,如果你这样做,你将到处复制字符串。

这是未经测试的,完全是意识流。它可能在某个地方有一个OB1。而且非常不是Java。

public String reverseString(String s)
  {
  char[] cstr = s.getChars();
  reverseCStr(cstr, 0, s.length - 1);

  return new String(cstr);
  }

/**
 * Reverse a character array in place.
 */
private void reverseCStr(char[] a, int s, int e)
  {
  // This is the middle of the array; we're done.
  if (e - s <= 0)
    return;

  char t = a[s];
  a[s] = a[e];
  a[e] = t;
  reverseCStr(a, s + 1, e - 1);
  }