注意:本题与151 题相同:https://leetcode-cn.com/problems/reverse-words-in-a-string/
注意:此题对比原题有改动
原题连接:https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof/description/
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
注:
思路:先在字符串最后加一个空格(),再定义一个字符串string,然后用toCharArray方法把该字符串转换为char型数组,定义ab两个int型变量来作为后面“裁剪”字符串的角标,这时候for循环整个数组,if来判断不为空格的元素,判断出一个不为空格的元素则把该元素角标作为a,然后在if语句里面继续循环,但是从刚才a后面的一个元素开始,if语句来判断,遇见了空格就进行“裁剪”,用substring方法把a到b的字符串接在前面定义的新字符串string的后面,让后让外循环的i变成此时的b,break结束内循环,再次进行外循环,以此类推,最后得到新的字符串就是符合题目的字符串,但是这时候,最后肯定是存在一个空格的,用trim方法去除首位空格即可(详情见代码)
代码:
/*
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
为简单起见,标点符号和普通字母一样处理。
例如输入字符串"I am a student. ",则输出"student. a am I"。*/
//String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
//String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
package LeetCode;
public class offer58_1 {public static void main(String[] args) {String s = reverseWords("the sky is blue");System.out.println(s);}public static String reverseWords(String s) {s=s+" ";String string="";char[] chars = s.toCharArray();int a,b=0;for (int i = b; i if (chars[i]!=' '){a=i;for (int j = i+1; j if (chars[j]==' '){b=j;i=b;String substring = s.substring(a, b+1);string=substring+string;break;}}}}String trim = string.trim();return string;}
}
/*
class Solution {public String reverseWords(String s) {}
}*/
官方答案过长且部分看不太懂,这里只放链接:官方答案