力扣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);

 

posted on 2022-05-08 09:35  我不想一直当菜鸟  阅读(402)  评论(0编辑  收藏  举报