Typescript 编码年史:字符串的反转元音-js教程

首页 2024-07-11 14:52:36

问题陈述:

给定一个字符串 s,只反转字符串中的所有元音并返回。

元音是 'a'、'e'、'i'、'o' 和 'u它们可以多次以小写和大写的形式出现。

示例1:
  • 输入:s =“你好”
  • 输出:“holle”
示例2:
  • 输入:s = "leetcode"
  • 输出:“leotcede”
限制条件:
  • 1
  • s 由可打印的 ascii 字符组成。
初步思考过程:

为了解决这个问题,我们需要识别字符串中的所有元音,逆转它们的顺序,然后把它们放回原来的位置。这可以用两种方法来完成:

  1. 蛮力法:提取元音,逆转元音,然后在字符串中替换元音。
  2. 双指针方法:用两个指针反转元音。
基本解决方案: 代码:
function reversevowelsbruteforce(s: string): string {
    const vowels = new set(['a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u']);
    let vowellist: string[] = [];

    // extract vowels from the string
    for (let char of s) {
        if (vowels.has(char)) {
            vowellist.push(char);
        }
    }

    // reverse the list of vowels
    vowellist.reverse();

    // create a result array to build the output string
    let result: string[] = [];
    let vowelindex = 0;

    // reconstruct the string with reversed vowels
    for (let char of s) {
        if (vowels.has(char)) {
            result.push(vowellist[vowelindex]);
            vowelindex  ;
        } else {
            result.push(char);
        }
    }

    return result.join('');
}
时间复杂度分析:
  • 时间复杂: o(n),n是字符串的长度。需要提取元音、反转元音和重建字符串 o(n) 时间。
  • 空间复杂度: o(n),用于存储元音和结果数组。
限制:

暴力解决方案很有效,但使用额外的空间来存储元音和结果数组。

优化方案: 代码:
function reversevowelsoptimized(s: string): string {
    const vowels = new set(['a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u']);
    let sarray = s.split('');
    let left = 0;
    let right = sarray.length - 1;

    while (left 



<h3>
  
  
  时间复杂度分析:
</h3>

  • 时间复杂: o(n),n是字符串的长度。每个字符最多检查两次。
  • 空间复杂度: o(n),用于字符串的数组表示。如果我们不计算输入和输出字符串使用的空间,可以认为空间的复杂性是 o(1)。
改进基本解决方案:
  • 优化解决方案采用两指针法将元音反转到位,减少对额外空间的需求。
边缘条件及测试: 边缘情况:
  1. 字符串不包括元音。
  2. 字符串只包含元音。
  3. 字符串有大写和小写元音。
  4. 字符串的长度达到最小或最大限度。
测试用例:
console.log(reverseVowelsBruteForce("hello")); // "holle"
console.log(reverseVowelsBruteForce("leetcode")); // "leotcede"
console.log(reverseVowelsBruteForce("aA")); // "Aa"
console.log(reverseVowelsBruteForce("")); // ""
console.log(reverseVowelsBruteForce("bcdfg")); // "bcdfg"

console.log(reverseVowelsOptimized("hello")); // "holle"
console.log(reverseVowelsOptimized("leetcode")); // "leotcede"
console.log(reverseVowelsOptimized("aA")); // "Aa"
console.log(reverseVowelsOptimized("")); // ""
console.log(reverseVowelsOptimized("bcdfg")); // "bcdfg"
一般解决问题的策略:
  1. 理解问题:仔细阅读问题陈述和约束条件,以了解需要什么。
  2. 识别关键操作: 确定所需的关键操作,如识别和反转元音。
  3. 优化可读性: 使用清晰简洁的逻辑,确保代码易于理解。
  4. 彻底测试: 使用各种情况(包括边缘情况)来测试解决方案,以确保正确性。
识别类似问题:
  1. 字符串操作:

    • 需要根据具体情况修改字符串的问题
    • 例子:颠倒句子中的单词顺序。
  2. 双指针:

    • 使用两个指针可以帮助优化解决方案。
    • 例子:从排序数组中删除重复项。
  3. 基于角色的操作:

    • 根据特定字符或字符集操作的问题
    • 例子:通过忽略非字母数字符来检查字符串是否为回文。
结论:
  • 使用强大的方法和优化的两指针方法可以有效地解决字符串中元音反转的问题。
  • 了解问题并将其分解为可管理的部分是非常重要的。
  • 使用清晰的逻辑和优化可读性可以确保解决方案易于遵循。
  • 使用各种边缘条件进行测试可以保证鲁棒性。
  • 识别问题的模式有助于在其他挑战中应用类似的解决方案。

通过练习这些问题和策略,可以提高解决问题的能力,为各种编码挑战做好更好的准备。

以上就是Typescript。 编码年史:字符串反转元音的详细内容,请关注其他相关文章!


p