首页 > 试题广场 >

原串翻转

[编程题]原串翻转
  • 热度指数:66914 时间限制: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[] ch =iniString.toCharArray();
            char[] ch1 = new char[iniString.length()];
            for(int i=0,j=ch1.length-1;i<ch.length;i++,j--){
                ch1[j]=ch[i];
            }
            return String.valueOf(ch1);
    }
}
发表于 2022-08-24 23:17:30 回复(1)
public class Reverse {
    public String reverseString(String iniString) {
        StringBuffer str = new StringBuffer(iniString);
        return str.reverse().toString();
    }
}
发表于 2022-01-12 10:29:59 回复(0)
class Reverse:
    def reverseString(self, iniString):
        # write code here
        return "".join(reversed(iniString))
发表于 2021-02-05 17:36:51 回复(0)
Java解法:
一、使用 StringBuilder , 调用去api reverse() 进行翻转
空间:O(n) 
时间:O(n)
二、使用 char 数组, 进行替换翻转
空间:O(n) 
时间:O(n)
三、使用二分进行翻转
空间:O(n) ~ O(n*n) 
时间:O(nlogn)

package june.code.byhehe.book.GoldBook;

import java.util.Scanner;

public class CM2StrReverse {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StrReverse sr = new StrReverse();
        String iniString = sc.nextLine();
        while (sc.hasNext()){
            System.out.println(sr.reverseString(iniString));
        }
    }
}

class StrReverse{
    // 方法一、 使用 StringBuilder 进行翻转
    public String reverseString(String iniString) {
        // write code here
        StringBuilder sb = new StringBuilder(iniString);
        return sb.reverse().toString();
    }

    // 方法二、使用 char 数组 进行翻转
    public String reverseString2(String iniString) {
        char[] chars = iniString.toCharArray();
        int left = 0, right = chars.length-1;
        while (left < right){
            char temp = chars[right];
            chars[right] = chars[left];
            chars[left] = temp;
            left++;
            right--;
        }
        return chars.toString();
    }
    // 使用 二分法 进行反转  不断二分直至 最小
    public String reverseString3(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 reverseString3(right) + reverseString3(left);
    }

}

相比之下 Python 的解法比较简单粗暴些:
class Reverse:
    def reverseString(self, iniString):
        # write code here
        return iniString[::-1]



发表于 2020-09-23 17:52:47 回复(0)
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        StringBuilder sb=new StringBuilder();
        for(int i=iniString.length()-1;i>=0;i--){
            sb.append(iniString.charAt(i));
        }
        return sb.toString();
    }
}

发表于 2020-09-02 21:27:11 回复(0)
    public String reverseString(String iniString) {
        char temp;
        int length = iniString.length();
        int mid = length / 2;
        char[] arr = iniString.toCharArray();
        for (int i = 0; i < length; i++) {
            if (i < mid) {
                //exchange
                temp = arr[i];
                arr[i] = arr[length - 1 - i];
                arr[length - 1 - i] = temp;
            } else break;
        }
        return String.valueOf(arr);
    }

思路就是首尾交换,循环一半,时间复杂度n/2
发表于 2020-05-15 12:55:13 回复(0)
倒着输出就行了!
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        String st="";
        for(int i=iniString.length();i>0;i--){
            char ch=iniString.charAt(i-1);
            st=st+ch;
        }
        return st;
    }
}
发表于 2020-02-04 09:51:52 回复(0)
import java.util.*;

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

发表于 2019-12-11 23:10:43 回复(0)
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        return new StringBuffer(iniString).reverse().toString();
    }
}
这玩意也能过
发表于 2019-09-06 17:21:55 回复(0)
不用额外的数据结构和空间,只能递归了

import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
       return su(iniString,iniString.length());
    }
       public  String su(String s,int i){
        if (i==0)
            return "";
        return s.substring(i-1,i)+su(s,i-1);
    }
}

发表于 2019-07-25 13:43:23 回复(0)
import java.util.*;
//一行
public class Reverse {
    public String reverseString(String iniString) {
        // write code here
        return new StringBuilder(iniString).reverse().toString();
    }
}

发表于 2019-07-20 10:09:28 回复(0)

递归

 public static String reverseString(String iniString) {
        // write code here

        if ("".equals(iniString)){
            return "";
        }
        String lastString = iniString.substring(iniString.length() - 1);
        return lastString + reverseString(iniString.substring(0,iniString.length() - 1));
    }
发表于 2019-05-05 15:57:40 回复(0)
//翻转字符串  又是字符数组和字符串的完美配合  在java中  字符串的API非常强大  
  public static String reverseString(String iniString) {

        char[] ch=iniString.toCharArray();
        //注意了  翻转的话也就这个下标是个要注意的地方
        for(int i=0;i<ch.length;i++)
            ch[i]=iniString.charAt(ch.length-1-i);
        
        return new String(ch);

    }

发表于 2019-02-08 20:44:39 回复(0)
public class Reverse {

	public static void main(String[] args) {
		System.out.println(reverseString("linhongcun"));
	}

	public static String reverseString(String iniString) {
		StringBuilder string = new StringBuilder();
		for (int i = 0; i < iniString.length(); i++) {
			string.append(iniString.charAt(iniString.length()-i-1));
		}
		return string.toString();
	}

}

倒装
发表于 2018-09-26 08:46:58 回复(0)
一行代码了解一下~
参考了下大佬的代码,觉得自己还是不要投机啦

编辑于 2018-09-15 16:20:36 回复(0)
import java.util.*;

public class Reverse {
    public String reverseString(String iniString) {
        StringBuffer sb = new StringBuffer(iniString);
        return sb.reverse().toString();
    }
}
发表于 2018-08-02 11:53:34 回复(0)
public class Reverse {
    public String reverseString(String iniString) {
        // write code here
        for(int i = 0; i < iniString.length() - 1; i++){
                /*
                String back = iniString.substring(iniString.length() - i);
                String head = iniString.substring(1, iniString.length() - i);
                String chr = iniString.substring(0, 1);
                iniString = head + chr + back;
                */

            iniString = 
                    iniString.substring(1, iniString.length() - i) + 
                    iniString.substring(0, 1) +                     
                    iniString.substring(iniString.length() - i);                
        }
        return iniString;
    }


将String拆成三个部分: 
1. 未转换的头 
2. 新插入的char(为了统一这里也做成string) 
3. 已经转换好的尾
轮着变换n - 1次即可完成
发表于 2018-06-25 08:45:18 回复(0)
private String rotate(String iniString) {
    String str = "";  for (int i = iniString.length(); i > 0; i--) {
        str += iniString.charAt(i-1);  
    }
     return str; 
}

思路:从最后一个字符开始存到一个新的字符串

编辑于 2018-05-09 16:07:30 回复(0)
import java.util.*;

public class Reverse {
    public String reverseString(String str) {
        // write code here
        StringBuilder sb = new StringBuilder(str);
        return sb.reverse().toString();
    }
}
发表于 2018-04-30 21:09:50 回复(0)
import java.util.*;

public class Reverse {
    public String reverseString(String str) {
        StringBuilder sb = new StringBuilder();
        for(int i=str.length()-1;i>=0;i--){
            sb.append(str.charAt(i));
        }
        return sb.toString();
    }
}
发表于 2018-03-09 14:42:47 回复(0)