• 345. Reverse Vowels of a String


    https://leetcode.com/problems/reverse-vowels-of-a-string/

    本题大意:实现字符串中元音字母的反转。

    解题思路:该题多种思路,这里给出两种。

    1、用栈存储扫描到的元音字母,然后重新扫描,把栈中的元音字母填入字符串。时间复杂度o(2n)。

    代码实现:

     1 class Solution {
     2 public:
     3     string reverseVowels(string s) {
     4         int n = s.length();
     5         stack<char> letter;
     6         for(int i = 0; i < n; i++)
     7         {
     8             if(s[i] == 'a' ||s[i] == 'e' || s[i] == 'i' || s[i] == 'o'||s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I'||s[i] == 'O'||s[i] == 'U')
     9             {
    10                 letter.push(s[i]);
    11             }
    12         }
    13         for(int i = 0; i < n; i++)
    14         {
    15             if(s[i] == 'a' ||s[i] == 'e' || s[i] == 'i' || s[i] == 'o'||s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I'||s[i] == 'O'||s[i] == 'U')
    16             {
    17                 s[i] = letter.top();
    18                 letter.pop();
    19             }
    20         }
    21         return s;
    22     }
    23 };

    2、优化代码。从前往后扫描找到元音字母,再从后往前扫描找到元音字母,将两者对调。虽说是两个for循环嵌套起来,但是时间复杂度降低为o(n)了。

     1 class Solution {
     2 public:
     3     string reverseVowels(string s) {
     4         int n = s.length();
     5         int flag = n;
     6         for(int i = 0; i < flag; i++)
     7         {
     8             if(s[i] == 'a' ||s[i] == 'e' || s[i] == 'i' || s[i] == 'o'||s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I'||s[i] == 'O'||s[i] == 'U')
     9             {
    10                 for(int j = flag-1; j > i; j--)
    11                 {
    12                     if(s[j] == 'a' ||s[j] == 'e' || s[j] == 'i' || s[j] == 'o'||s[j] == 'u' || s[j] == 'A' || s[j] == 'E' || s[j] == 'I'||s[j] == 'O'||s[j] == 'U')
    13                     {
    14                         char tmp = s[j];
    15                         s[j] = s[i];
    16                         s[i] = tmp;
    17                         flag = j;
    18                         break;
    19                     }
    20                 }
    21             }
    22         }
    23         return s;
    24     }
    25 };
  • 相关阅读:
    luogu P1613 跑路
    luogu P2047 社交网络
    luogu P2740 [USACO4.2]草地排水Drainage Ditches
    「字典树」最大异或对
    「贪心」耍杂技的牛
    「贪心」士兵
    「贪心」糖果传递
    「几何」[USACO12DEC]疯狂的栅栏Crazy Fences
    「LCA」[USACO10HOL]牛的政治Cow Politics
    「二分答案 + 前缀和」防线
  • 原文地址:https://www.cnblogs.com/jingyuewutong/p/5584881.html
Copyright © 2020-2023  润新知