反转字符串三种求解方法

   日期:2020-07-15     浏览:89    评论:0    
核心提示:Day1,反转字符串求解方法方法一:递归方法方法二:不使用递归的java代码方法三:基础的C语言代码实现方法一:递归方法算法思想:我们实现递归函数helper,它接受两个参数:left左指针和right右指针。如果left>=right,不做任何操作。否则交换s[left]和s[right]和调用helper(left + 1, right - 1)。首次调用函数我们传递首尾指针反转整个字符串return helper(0, len(s) - 1)。主要代码如下(不是源代码):cl

Day1,反转字符串求解方法

    • 方法一:递归方法
    • 方法二:不使用递归的java代码
    • 方法三:基础的C语言代码实现

方法一:递归方法

算法思想

我们实现递归函数helper,它接受两个参数:left左指针和right右指针。

  • 如果left>=right,不做任何操作。
  • 否则交换s[left]和s[right]和调用helper(left + 1, right - 1)。
    首次调用函数我们传递首尾指针反转整个字符串return helper(0, len(s) - 1)。
    主要代码如下(不是源代码):
class Solution{
  public void helper(char[] s, int left, int right){
    if(left >= right) return;
    char tmp = s[left];
    s[left++] = s[right];
    s[right--] = tmp;
    helper(s, left, right);
  }
  
  public void reverseString(char[] s){
    helper(s, 0, s.lenghth - 1);
  }
}

复杂度分析

  • 时间复杂度:O(N)。执行了N/2次交换。
  • 空间复杂度:O(N)。递归过程中使用的堆栈空间。

方法二:不使用递归的java代码

这里先给代码

class Solution{
  public void reverseString(char[] s){
    if(s.length==0) return;
    int index = s.length - 1;
    int start = 0;
    while(true){
      //交换
      char tmp = s[start];
      s[start] = s[index];
      s[index] = tmp;
      index--;
      start++;
      if(index<start) break;
    }
  }
}

方法三:基础的C语言代码实现

暂时只给主要代码

void reverseString(char* s, int sSize){
  int i, j;
  char tmp;
  for(i=0, j=sSize-1; i<=sSize/2; i++, j--)
  {
    tmp = s[i];
    s[i] = s[j];
    s[j] = tmp;
  }
}

运行结果:

但是,这里有一个问题,当下面这种情况时,输出结果错误,请大佬指点

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服