列表

详情


6926. 将字符串中的元音字母排序

给你一个下标从 0 开始的字符串 s ,将 s 中的元素重新 排列 得到新的字符串 t ,它满足:

请你返回结果字母串。

元音字母为 'a' ,'e' ,'i' ,'o' 和 'u' ,它们可能是小写字母也可能是大写字母,辅音字母是除了这 5 个字母以外的所有字母。

 

示例 1:

输入:s = "lEetcOde"
输出:"lEOtcede"
解释:'E' ,'O' 和 'e' 是 s 中的元音字母,'l' ,'t' ,'c' 和 'd' 是所有的辅音。将元音字母按照 ASCII 值排序,辅音字母留在原地。

示例 2:

输入:s = "lYmpH"
输出:"lYmpH"
解释:s 中没有元音字母(s 中都为辅音字母),所以我们返回 "lYmpH" 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string sortVowels(string s) { } };

java 解法, 执行用时: 52 ms, 内存消耗: 44.4 MB, 提交时间: 2023-07-24 09:43:06

class Solution {
    public String sortVowels(String s) {
        char[] charArray = s.toCharArray();
        String ss = "aeiouAEIOU";
        List<Character> list = new ArrayList<>();
        for (char c : s.toCharArray()) {  // 元音字母抽取出来
            if (ss.indexOf(c) != -1) {
                list.add(c);
            }
        }
        Collections.sort(list);   // 元音字母按ascii排序

        int j = 0;
        for (int i = 0; i < charArray.length; i++) {
            if (ss.indexOf(charArray[i]) != -1) {
                charArray[i] = list.get(j++);  // 将元音位填充回去
            }
        }

        return new String(charArray);
    }
}

cpp 解法, 执行用时: 40 ms, 内存消耗: 11.6 MB, 提交时间: 2023-07-24 09:41:57

class Solution {
public:
    string sortVowels(string s) {
        // 判断是不是元音
        auto check = [](char c) {
            return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U';
        };

        // 把元音都抽出来放进 vector 里并排序
        vector<char> vec;
        for (char c : s) if (check(c)) vec.push_back(c);
        sort(vec.begin(), vec.end());

        // 把排序后的元音放回去
        int n = s.size();
        for (int i = n - 1; i >= 0; i--) if (check(s[i])) s[i] = vec.back(), vec.pop_back();
        return s;
    }
};

python3 解法, 执行用时: 148 ms, 内存消耗: 19 MB, 提交时间: 2023-07-24 09:40:57

class Solution:
    def sortVowels(self, s: str) -> str:
        s1 = sorted([c for c in s if c in "AEIOUaeiou"], reverse = True)
        return ''.join(s1.pop() if c in "AEIOUaeiou" else c for c in s)

golang 解法, 执行用时: 16 ms, 内存消耗: 6.4 MB, 提交时间: 2023-07-24 09:40:12

func sortVowels(s string) string {
	a := []byte{}
	for _, c := range s {
		if 2130466>>(c&31)&1 > 0 {  // 判断是否元音字母
			a = append(a, byte(c))
		}
	}
	sort.Slice(a, func(i, j int) bool { return a[i] < a[j] }) // 元音字母排序

	t, j := []byte(s), 0
	for i, c := range t {
		if 2130466>>(c&31)&1 > 0 {
			t[i] = a[j]
			j++
		}
	}
	return string(t)
}

python3 解法, 执行用时: 140 ms, 内存消耗: 18.6 MB, 提交时间: 2023-07-24 09:36:41

class Solution:
    def sortVowels(self, s: str) -> str:
        a = sorted(c for c in s if c in "aeiouAEIOU") # 元音字母按ascii排序
        t = list(s)
        j = 0
        for i, c in enumerate(t):
            if c in "aeiouAEIOU":
                t[i] = a[j]  # 元音位重新填充
                j += 1
        return ''.join(t)

上一题