算法修炼之路—【字符串】Leetcode 345 反转字符串中的元音字母

Laraine ·
更新时间:2024-09-20
· 942 次阅读

文章目录题目描述思路分析解题代码复杂度分析Github源码 题目描述

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例1:

输入: s = “hello”
输出: “holle”

示例2:

输入: s = “leetcode”
输出: “leotcede”

思路分析

难度是简单 ,我们首先要明确元音字母的涵盖范围{a, e, i, o, u},之后就是常规的条件判断是否为元音反转元音字符操作了,这里需要进一步思考的是反转字符,这里我们观察两个示例,发现当交换对的字符均为原因字母时才会触发交换,故我们这里罗列出步骤:

判断字符是否为元音字母; 判断倒序字符是否为元音字母; 若是,则交换并向前搜索;否则向前搜索;

交换相向位置的元音字符,这里我们借用集合set 对有限元音字符进行存储,方便元音判断;这里直接给代码:

解题代码 public static String solution(String s) { if (s == null || s.length() < 2) { return s; } Set set = new HashSet(); set.add('a'); set.add('e'); set.add('i'); set.add('o'); set.add('u'); char[] res = s.toCharArray(); for (int i = 0, j = s.length() - 1; i < j;) { if (set.contains(res[i])) { if (set.contains(res[j])) { if (res[i] != res[j]) { char tmpC = res[i]; res[i] = res[j]; res[j] = tmpC; } i++; j--; } else j--; } else i++; } return new String(res); } 复杂度分析

这里我们设n为输入字符数组的长度,l个元音字符;

时间复杂度: 我们对数组进行了n次访问,比较并交换了l个字符,故时间复杂度为O(n);
空间复杂度: 我们使用了set存储元音,但其不随n变化,故为常量级;res为返回值容器,故空间复杂度为O(n);

Github源码

完整可运行文件请访问GitHub。

王槿岩 原创文章 61获赞 67访问量 2万+ 关注 私信 展开阅读全文
作者:王槿岩



元音字母 leetcode 字符串 反转 字母 算法 字符

需要 登录 后方可回复, 如果你还没有账号请 注册新账号