首页 > 试题广场 > 原串翻转
[编程题]原串翻转
  • 热度指数:62284 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。

给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。

测试样例:
"This is nowcoder"
返回:"redocwon si sihT"
推荐
思路:将字符进行对称位置交换
代码如下:
class Reverse {
public:
    string reverseString(string iniString) {
        // write code here
        char c;//中间变量
        int i = 0;
        int len = iniString.length();
        for(; i < len / 2; i ++)
        {
         c = iniString[i];
            iniString[i] = iniString[len - i - 1];
            iniString[len - i - 1] = c;
        }
        return iniString;
    }
};
编辑于 2015-08-18 20:26:41 回复(40)
思路:i从前往后,j从后往前,当 i<j 时,交换i和j指向元素的值

class Reverse {
public:
    string reverseString(string iniString) {
        int i,j;
        for(i= 0,j= iniString.length()-1; i<j; i++,j--)  iniString[i]^= iniString[j]^= iniString[i]^= iniString[j];//交换
        return iniString;
    }
};

编辑于 2015-11-29 18:09:27 回复(14)
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        StringBuffer sb = new StringBuffer(iniString);
	    return sb.reverse().toString();
    }
}

发表于 2016-07-26 21:33:04 回复(19)
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        // write code here
        char[] a=iniString.toCharArray();    
        for (int i = 0; i < a.length/2; i++) {
            char temp = a[a.length-1-i];
            a[a.length-i-1]=a[i];
            a[i]=temp;
        }
        return new String(a);
    }
}

Java 里又不能直接操作字符串,只能用个其他东西来

发表于 2016-03-13 11:26:56 回复(7)
return iniString[::-1]

python solution.

发表于 2017-10-01 20:08:55 回复(2)
class Reverse {
public:
    string reverseString(string iniString) 
    {
            string temp(iniString.crbegin(),iniString.crend());
            return temp;
    }
};
没有更简单的了吧~~
编辑于 2015-09-07 10:25:49 回复(12)
class Reverse {
public:
    string reverseString(string str) {
        int i=0,j=str.size()-1;
        while(i<j)
          { str[i]=str[i]+str[j];
            str[j]=str[i]-str[j];
            str[i]=str[i]-str[j];
            i++;j--;
          }
        return str;
    }
};

发表于 2016-10-16 11:37:34 回复(0)
class Reverse {
public:
    string reverseString(string iniString) {
		for(int i = 0;i<iniString.length()/2;++i){
			swap(iniString[i],iniString[iniString.length()-1-i]);
		}
		return iniString;
    }
};

发表于 2016-08-19 14:05:48 回复(0)
  public String reverseString(String iniString) {
        String str = "";
		for (int i = 0; i < iniString.length(); i++) {
			str = iniString.charAt(i) + str;
		}
		return str;
    }

编辑于 2016-05-06 14:38:49 回复(5)
//一句话搞定
 public String reverseString(String iniString) {
        return new StringBuilder(iniString).reverse().toString();
    }
发表于 2016-03-09 21:00:32 回复(3)

折半交换。

将字符串一分为二。分别交换这两部分即可。

递归停止条件是子串长度为2或3.这两种情况可以之间返回交换后的结果。

设字符串长度为l:

若l为双数,分别处理 substring(l/2,l)+substring(0,l/2).

如“abcdefgh”=>“efgh|abcd”=>“gh|ef|cd|ab”=>“hg|fe|dc|ba”即可。

若l为单数,分别处理substring(l/2+1,l)+charAt(l/2)+substring(0,l/2).

如“abcdefghi”=>"fghi|e|abcd"=>"hi|fg|e|cd|ab"=>"ih|gf|e|dc|ba".

if(iniString.length()==2){
            return ""+iniString.charAt(1)+iniString.charAt(0);
        }
if(iniString.length()==3){
            return ""+iniString.charAt(2)+iniString.charAt(1)+iniString.charAt(0);
        }
        //双数
if(iniString.length()%2==0) 
            return reverseString(iniString.substring(iniString.length()/2,iniString.length()))
        +reverseString(iniString.substring(0,iniString.length()/2));
        //单数
else
            return reverseString(iniString.substring(iniString.length()/2+1,iniString.length())) 
            +iniString.charAt(iniString.length()/2)
            +reverseString(iniString.substring(0,iniString.length()/2));
编辑于 2017-04-26 11:12:42 回复(0)
发表于 2015-09-18 20:20:50 回复(4)
# -*- coding:utf-8 -*-
class Reverse:
    def reverseString(self, iniString):
        # write code here
        return iniString[::-1]
胖子就是滑头
发表于 2017-04-12 16:34:02 回复(2)
       //提供三种思路四种方法
       //jdk方法,没有考虑***对,位运算巧妙解决了奇偶个数问题
    public static String rNative(String s){
        int length = s.length();
        char[] carray = s.toCharArray();
        for(int i=(length-1)>>1; i>=0; i--){
            carray[length-1-i] = s.charAt(i);
            carray[i] = s.charAt(length-1-i);
        }
        return new String(carray);
    }

    //直接用
    public static String r(String s){
        StringBuffer sb = new StringBuffer(s);
        return sb.reverse().toString();
    }
    //二分法递归
    public static String r1(String s){
        int length = s.length();
        if(length <= 1)
            return s;
        String left = s.substring(0, length/2);
        String right = s.substring(length/2, length);
        return r1(right)+r1(left);
    }

    public static String r2(String s){
        String reverse = "";
        for(int i=s.length()-1; i>=0; i--){
            reverse += s.charAt(i);
        }
        return reverse;
    }
编辑于 2017-03-16 10:16:01 回复(0)
class Reverse {
public:
    string reverseString(string iniString) 
    {
        // write code here
        int length=iniString.size();
        int middle=length>>1;//交换时间复杂度O(n);计算次数n/2
        if(length<1)
            return NULL;
        int end=length-1;
        for(int i=0;i<=middle;i++)
        {
            if(i<=end)
            {
                int temp=iniString[i];
            iniString[i]=iniString[end];
                iniString[end]=temp;
                end--;
            }
            
        }
        return iniString;
    }
};
发表于 2016-03-27 14:37:04 回复(0)
栈的使用
# -*- coding:utf-8 -*-
class Reverse:
    def reverseString(self, iniString):
            items = []
            string = []
            for x in iniString:
                items.append(x)

            size = len(items)
            while(size>0):
                string.append(items[size-1])
                size = size - 1





            content = "".join(string)
            return content
发表于 2016-01-31 10:01:43 回复(0)
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
  char[] array = iniString.toCharArray();
  String reverse = "";
        for (int i = array.length - 1; i >= 0; i--){
   reverse += array[i];
        }
  return reverse;
    }
}
发表于 2016-01-27 14:40:25 回复(2)
import java.util.*;
 
public class Reverse {
    public String reverseString(String iniString) {
        StringBuilder sb = new StringBuilder(iniString);
        int low = 0;
        int high = iniString.length()-1;
        char temp = '\0';
        while(low<high){
            temp = sb.charAt(low);
            sb.setCharAt(low, sb.charAt(high));
            sb.setCharAt(high, temp);
            low++;high--;
        }
        return sb.toString();
    }
}

发表于 2015-07-12 12:02:58 回复(2)
Ron头像 Ron
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        // write code here
    	int len = iniString.length();
    	StringBuilder sb = new StringBuilder(iniString);
    	for(int i = 0;i < len/2;i++){
    		char tmp = sb.charAt(len-i-1);
    		sb.setCharAt(len-i-1, sb.charAt(i));
    		sb.setCharAt(i, tmp);
    	}
    	return sb.toString();
    }
}

发表于 2015-08-23 20:52:58 回复(0)
class Reverse:
    def reverseString(self, iniString):
        # write code here
        return iniString[::-1]

发表于 2020-03-17 22:38:10 回复(0)
不太理解题意

import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        return new StringBuffer(iniString).reverse().toString();
    }
}

运行时间:47ms

占用内存:10124k


发表于 2018-09-26 14:38:27 回复(1)