• 反转字符串里的单词(leetcode 4.10每日打卡)


    给定一个字符串,逐个翻转字符串中的每个单词。
     
    示例 1:
    输入: "the sky is blue"
    输出: "blue is sky the"

    示例 2:
    输入: "  hello world!  "
    输出: "world! hello"
    解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

    示例 3:
    输入: "a good   example"
    输出: "example good a"
    解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

     
    说明:

     无空格字符构成一个单词。
     输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
     如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
     
    思路:先去除首尾以及内含的空格,然后用word数组来记录每个单词,然后分别倒序输入到s中。
    学习:网上oj因为不是一个测试样例执行一次总程序,所以全局变量应该执行一次清空一次。
     1 char dealS[10000] = { 0 };
     2 char word[10000] = { 0 };
     3 
     4 char* reverseWords(char* s)
     5 {
     6     int temBegin;
     7     int temEnd;
     8     int k = -1,l = -1;
     9     int len = strlen(s);
    10     memset()
    11     for (temBegin = 0; temBegin < strlen(s); temBegin++)  //删除开头的空格
    12     {
    13         if (s[temBegin] != ' ')
    14             break;
    15     }
    16 
    17     for (temEnd = strlen(s) - 1; temEnd >= 0; temEnd--)  //删除结尾的空格
    18     {
    19         if (s[temEnd] != ' ')
    20             break;
    21     }
    22     for (int i = temBegin; i < temEnd + 1; i++)//删除中途的空格
    23     {
    24         if (s[i] != ' ')
    25         {
    26             dealS[++k] = s[i];
    27         }
    28         else if (s[i] == ' ')
    29         {
    30             if (s[i + 1] == ' ')  //连续空格情况
    31                 continue;
    32             else
    33                 dealS[++k] = ' ';
    34         }
    35     }
    36     
    37     k = -1;
    38     memset(s, 0, len);  //清空s
    39     for (int i = strlen(dealS)-1; i >= 0; i--)
    40     {
    41         while (dealS[i] != ' ' && i != -1)
    42         {
    43             word[++l] = dealS[i];
    44             i--;
    45         }
    46         
    47         for (int j = l; j >= 0; j--)
    48         {
    49             s[++k] = word[j];
    50         }
    51         if (i != 0)  //如果不是最后
    52         {
    53             s[++k] = ' ';
    54         }
    55         memset(word, 0, l + 1); //清空word
    56         l = -1;
    57     }
    58     s[k] = '';
    59     return s;
    60 }
     

     
     
  • 相关阅读:
    杂题
    [ AtCoder Grand Contest 031] C
    [ AtCoder Regular Contest 107 ] C
    [ 实验舱 CSP/NOIP新赛制内部挑战赛4 ] 树上询问
    [ 2020牛客NOIP赛前集训营-提高组(第六场) ] 补题
    [NOI Online #2 提高组]子序列问题
    洛谷P4317 花神的数论题
    [AHOI2009]同类分布
    洛谷P3413 SAC#1
    数位dp小结
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12672521.html
Copyright © 2020-2023  润新知