剑指Offer-- 第58题 翻转字符串

第58题 翻转字符串

题目 输入一个英文句子,翻转句子中单词的顺序,单单词内字符的顺序不变。为简单起见,变电符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出“student. a am I”.
我的思路 想将其转为char数组,然后通过从后往前依次进行判断,同时使用到了StringBuilder,因为直接调用reverse可以进行字符串反转。

import java.util.Stack;
public class Solution {
    public String ReverseSentence(String str) {
       if (str == null || str.length() == 0) {
			return str;
		}
		//考虑从后向前;
		char[] chars=str.toCharArray();	
		str = "";
		StringBuilder temp = new StringBuilder("");
		for(int i=chars.length-1;i>=0;i--) {		
			if(chars[i]==32) { //空格;
				if(!temp.equals("")) {
					str+=temp.reverse();
					temp = new StringBuilder("");;
				}
				str+=chars[i];
			}else {
				temp.append(chars[i]);
			}
		}
		if(!temp.equals("")) { //这里需要最后判断一下,否则会出现遗漏;
			str+=temp.reverse();
			temp = new StringBuilder("");;
		}
		return str;
    }
}

剑指Offer的思想 两次翻转,先翻转整个句子,在依据空格分割,翻转单词,得到需要的句子。

//和之前自己的方法差不多,只是前一种我自己从后开始遍历的;
public static String ReverseSentence(String str) {
		if (str == null || str.length() == 0) {
			return str;
		}
	
		StringBuilder mStr=new StringBuilder(str);
		char[] chars = mStr.reverse().toString().toCharArray();
		str="";
		StringBuilder temp = new StringBuilder("");
		for(int i=0;i<chars.length;i++) {		
			if(chars[i]==32) { //空格,ASSCI为32;
				if(!temp.equals("")) {
					str+=temp.reverse();
					temp = new StringBuilder("");;
				}
				str+=chars[i];
			}else {
				temp.append(chars[i]);
			}
		}
		if(!temp.equals("")) {
			str+=temp.reverse();
			temp = new StringBuilder("");;
		}
		return str;
		
	}
posted @ 2018-07-21 13:11  LynnMin  阅读(419)  评论(0编辑  收藏  举报