6.字符串反转(京东面试题目)

1.题目描述:(京东面试题)

给定一个字符串,字符串是由空格和字母组成。我们现在需要做的是把字符串反转,但是保证两个空格间的字母顺序不变。例如“#I##am#a##student.##”->"##student.##a#am##I#"。其中“#”表示空格。(注意和剑指offer第58题的区别!【单词之间只有一个空格】)

2.解题思路:

我们首先可以整体把字符串反转,然后再根据空格的位置来判断单词起始和结束的位置(最后一个单词单独考虑!!),我们确定单词的起始和结束位置以后,再对每一个单词单独进行反转。

例如:“#I##am#a##student.##”-> "##.tneduts##a#ma##I#" ->->"##student.##a#am##I#"

注意特殊的输入:字符串中都是空格,字符串为空或者字符串尾部有多个字符串。。

3.Java代码:

public class Main {
	public static String ReverseSentence(String str){
		if(str == null)return null;
		if(str.trim().equals(""))return str;
		StringBuffer stringBuffer = new StringBuffer(str);
		stringBuffer.reverse();
		int start = 0;
		for (int i = 0; i < stringBuffer.length();i++) {
			//把最后一个子字符串单独处理,因为最后一个字符串的结尾不一定是空格(这里说的反转过后的字符串)
			if(i == stringBuffer.length()-1){		
				stringBufferReverse(stringBuffer, start, i+1);
			}
			//i!=0防止字符串的第一个是空格
			if(stringBuffer.charAt(i) == ' ' && i != 0){				
				stringBufferReverse(stringBuffer, start, i);
			}
			//找到下个子字符串的起点
			while(stringBuffer.charAt(i) == ' '){
				i++;
				start = i;
			}
		}
		return stringBuffer.toString();
	}
	//字符串的反转因为只能在StringBuffer中才有,为了对String中的子串实现反转,我们定义了如下函数:
	public static void stringBufferReverse(StringBuffer sBuffer, int start, int end) {
		String string = sBuffer.substring(start, end);
		StringBuffer temp = new StringBuffer(string);
		temp.reverse();
		sBuffer.replace(start, end, temp.toString());
	}
	public static void main(String[] args) {
		//String str = "I am a student.";
		//String str = "    ";
		String str = "I am a student.   ";
		System.out.println(ReverseSentence(str));
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值