首页 > 试题广场 >

原串翻转

[编程题]原串翻转
  • 热度指数:66888 时间限制: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 回复(41)
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 回复(8)
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)
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 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)
       //提供三种思路四种方法
       //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)
发表于 2015-09-18 20:20:50 回复(4)
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 {
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)
不皮一下怎么对得起迭代器这么优秀的设计呢
class Reverse {
public:
    string reverseString(string iniString) {
        return string(iniString.rbegin(),iniString.rend());
    }
};


发表于 2022-02-07 23:15:10 回复(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)
public class Reverse {
    public String reverseString(String iniString) {
        String temp1=iniString;
        StringBuffer temp2=new StringBuffer();
        for(int i=0;i<temp1.length();i++) {
            temp2.append(temp1.charAt(temp1.length()-i-1));
        }
        return temp2.toString();  
    }
} 

编辑于 2018-04-23 10:07:13 回复(0)
//核心代码演示
public static String reverseString(String iniString) {
        //先将字符穿转换成字符数组
        char []str = iniString.toCharArray();
        //临时变量,用于交换数值
        char temp;
        //交换次数
        int  n  = str.length/2;
        int i=0,j = str.length-1;
        while(n-->0) {
        	temp = str[i];
        	str[i] = str[j];
        	str[j] = temp;
        	i++;j--;
        }
        //返回交换后的字符串
        return String.valueOf(str);
    }

发表于 2018-02-14 00:00:52 回复(0)