第 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;
- }
来源: http://www.bubuko.com/infodetail-2694360.html