第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;
}