Java面试题-反转字符串的9种思路

本文汇总了面试中遇到的反转字符串问题,详细介绍了9种不同的解决方案,包括基本操作、双指针法、栈等方法。通过实例解析每种方法的实现逻辑和优缺点,帮助读者深入理解字符串反转的多种思路。

当年面试,面试官问了关于对一个字符串进行反转操作,有几种思路。当时只答了一种........尴尬

特意搜集整理了一下,不足之处,批评指正。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;
import java.util.ArrayDeque;

class  StringReverse
{
	public static void main(String[] args) 
	{
		StringReverse sr = new StringReverse();
		//获取控制台输入
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String str = null;
		try
		{
			str = in.readLine();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		//str = sr.reverseString_1(str);//利用StringBuffer的reverse方法.
		//str = sr.reverseString_2(str);
		//str = sr.reverseString_3(str);
		//str = sr.reverseString_4(str);
		//str = sr.reverseString_5(str);
		//str = sr.reverseString_6(str);
		//str = sr.revereString_7(str);
		str = sr.reverseString_8(str);
		System.out.println("输出:"+str);
	}
	
	//一 利用StringBuffer的reverse方法.
	public String reverseString_1(String str){
		StringBuffer sb = new StringBuffer(str);
		return sb.reverse().toString();
	}

	//二 自己实现StringBuffer的reverse方法
	public String reverseString_2(String str){
		int len = str.length();
		StringBuffer sb = new StringBuffer(len);
		for(int i = len-1;i>=0;i--){
			sb.append(str.charAt(i));
		}
		return sb.toString();
	}
	//三 将字符串用toCharArray()转成字符数组,自尾到头遍历
	public String reverseString_3(String str){
		char[] chs = str.toCharArray();
		String reverse = "";
		for(int i = chs.length-1;i >=0; i--){
			reverse +=chs[i];
		}

		return reverse;
	}
	//四 自头遍历字符串中的字符
	public String reverseString_4(String str){
		int len = str.length();
		String reverse = "";
		for(int i = 0; i<len; i++){
			reverse = str.charAt(i) + reverse;
		}
		return reverse;
	}
	//五 将字符串转成字符数组,首尾互换
	public String reverseString_5(String str){
		int len = str.length() - 1;
		int halflen = len / 2;
		char[] chs = str.toCharArray();
		char tmp;
		for(int i = 0; i < halflen; i++){
			tmp = chs[i];
			chs[i] = chs[len - i];
			chs[len-i] = tmp;
		}
		return new String(chs);
	}
	//六 字符串转成字符数组,遍历数组,首尾异或
	public String reverseString_6(String str){
		int begin = 0;
		int end = str.length() - 1;
		char[] chs = str.toCharArray();
		while(begin < end){
			chs[begin] =(char) (chs[begin] ^ chs[end]);
			chs[end] = (char)(chs[begin] ^ chs[end]);
			chs[begin] = (char)(chs[end] ^ chs[begin]);
			begin++;
			end--;
		}
		return new String(chs);
	}

	//利用java.util包中的Stack类,先遍历字符串中各个字符,压入栈,然后取出
	//jdk1.6开始,此类被ArrayDeque取代
	public String revereString_7(String str){
		Stack<Character> stack = new Stack<Character>();
		String reverse = "";
		for(int i = 0; i < str.length(); i++){
			stack.push(str.charAt(i));
		}
		while(!stack.empty())
			reverse+=stack.pop();
		return reverse;
	}

	//利用java.util包中的ArrayDeque类
	public String reverseString_8(String str){
		ArrayDeque<Character> ad = new ArrayDeque<Character>(str.length());
		String reverse = "";
		for(int i=0; i<str.length(); i++){
			ad.push(str.charAt(i));
		}
		
		while(!ad.isEmpty()){
			reverse+=ad.pop();
		}

		return reverse;
	}

	//递归实现
	public String reverseString_9(String str){
		int len = str.length();
		if(len <= 1)
			return str;
		String left = str.substring(0,len/2);
		String right = str.substring(len/2,len);
		return reverseString_9(right)+reverseString_9(left);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值