力扣557(java)-反转字符串中的单词(简单)
题目:
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
- 1 <= s.length <= 5 * 104
- s 包含可打印的 ASCII 字符。
- s 不包含任何开头或结尾空格。
- s 里 至少 有一个词。
- s 中的所有单词都用一个空格隔开。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
1.先将字符串转换成字符数组,然后遍历字符数组;
2.当遇到空格字符,则说明前一个单词结束了,需要对空格前的单词进行翻转操作,定义一个初始索引start,结束索引为 i-1(因为此时i所指向的为空格,需要减1才是字母)
3.利用字符数组reverse()函数进行翻转操作,翻转结束后,把初始索引start更新为 i+1 下一个单词的首字母位置,然后继续遍历,直到遇到下一个空格或结尾;
4.遍历到字符数组结尾(i == n-1),最后一个单词的结束索引为 n-1,然后利用函数进行翻转;
5.最后用String的构造方法,将char数组转换成字符串进行返回。
代码:
1 class Solution { 2 public String reverseWords(String s) { 3 //把字符串转换为字符串数组 4 char[] array = s.toCharArray(); 5 //获取字符串数组的长度 6 int n = array.length; 7 //定义一个头指针 8 int start = 0; 9 for(int i= 0;i < n;i++){ 10 //遍历字符串数组,遇到空格符代表一个单词遍历结束 11 if(array[i] == ' '){ 12 reverse(array, start, i-1); 13 //首指针为下一个单词首位置 14 start = i+1; 15 } 16 //遍历到最后一个单词 17 if(i == n-1){ 18 reverse(array, start, i); 19 } 20 } 21 return new String(array); 22 } 23 public void reverse(char[] array, int i, int j){ 24 while(i < j){ 25 char temp = array[j]; 26 array[j] = array[i]; 27 array[i] = temp; 28 i++; 29 j--; 30 } 31 } 32 }
小知识:
1.toCharArray() 方法将字符串转换为字符数组
// 将字符串s转化成一个char类型的数组,数组名为s1 char[] s1 = s.toCharArray();
2.将s1转化成string字符串: return new String(s1);