345. Reverse Vowels of a String

Leetcode 问题: 345. Reverse Vowels of a String

题目

Given a string s, reverse only all the vowels in the string and return it.

The vowels are ‘a’, ’e’, ‘i’, ‘o’, and ‘u’, and they can appear in both cases.

前后交换母音字

答案

Golang

// 反转母音字
func reverseVowels(checkText string) string {
	// 将检查的文字转换成 byte (uint8)
	checkTextByte := []byte(checkText)

	// 设定检查索引
	frontLetterIndex := 0
	backLetterIndex := len(checkTextByte) - 1

	for frontLetterIndex < backLetterIndex {
		// 若前后索引还没交换,表示还没检查完
		if !isVowelLetter(checkTextByte[frontLetterIndex]) {
			// 如果前面的字不是母音字,往后移动到下一个字
			frontLetterIndex++
			continue
		}
		if !isVowelLetter(checkTextByte[backLetterIndex]) {
			// 如果后面的字不是母音字,往后钱动到下一个字
			backLetterIndex--
			continue
		}

		// 找到了两个母音字,交换彼此字位置
		checkTextByte[frontLetterIndex], checkTextByte[backLetterIndex] = checkTextByte[backLetterIndex], checkTextByte[frontLetterIndex]

		// 继续移动字的索引
		frontLetterIndex++
		backLetterIndex--
	}

	// 转换 byte (uint8) 为 string
	finalCheckText := string(checkTextByte)

	return finalCheckText
}

// 检查是否为母音字
func isVowelLetter(checkLetter byte) bool {
	return checkLetter == 'a' || checkLetter == 'e' || checkLetter == 'i' || checkLetter == 'o' || checkLetter == 'u' || checkLetter == 'A' ||
		checkLetter == 'E' || checkLetter == 'I' || checkLetter == 'O' || checkLetter == 'U'
}

完整程式码

package main

import (
	"fmt"
)

type Question struct {
	// 参数
	Parameter
	// 答案
	Answer
}

// 参数
type Parameter struct {
	checkText string
}

// 答案
type Answer struct {
	result string
}

func main() {

	QuestionList := []Question{
		{
			Parameter{"hello"},
			Answer{"holle"},
		},

		{
			Parameter{"leetcode"},
			Answer{"leotcede"},
		},

		{
			Parameter{"aA"},
			Answer{"Aa"},
		},
	}

	fmt.Printf("------------------------Leetcode Problem 345------------------------\n")
	for _, question := range QuestionList {
		param := question.Parameter
		fmt.Printf("【input】:%v       【output】:%v\n", param, reverseVowels(param.checkText))
	}
}

// 反转母音字
func reverseVowels(checkText string) string {
	// 将检查的文字转换成 byte (uint8)
	checkTextByte := []byte(checkText)

	// 设定检查索引
	frontLetterIndex := 0
	backLetterIndex := len(checkTextByte) - 1

	for frontLetterIndex < backLetterIndex {
		// 若前后索引还没交换,表示还没检查完
		if !isVowelLetter(checkTextByte[frontLetterIndex]) {
			// 如果前面的字不是母音字,往后移动到下一个字
			frontLetterIndex++
			continue
		}
		if !isVowelLetter(checkTextByte[backLetterIndex]) {
			// 如果后面的字不是母音字,往后钱动到下一个字
			backLetterIndex--
			continue
		}

		// 找到了两个母音字,交换彼此字位置
		checkTextByte[frontLetterIndex], checkTextByte[backLetterIndex] = checkTextByte[backLetterIndex], checkTextByte[frontLetterIndex]

		// 继续移动字的索引
		frontLetterIndex++
		backLetterIndex--
	}

	// 转换 byte (uint8) 为 string
	finalCheckText := string(checkTextByte)

	return finalCheckText
}

// 检查是否为母音字
func isVowelLetter(checkLetter byte) bool {
	return checkLetter == 'a' || checkLetter == 'e' || checkLetter == 'i' || checkLetter == 'o' || checkLetter == 'u' || checkLetter == 'A' ||
		checkLetter == 'E' || checkLetter == 'I' || checkLetter == 'O' || checkLetter == 'U'
}

参考资料