【华为OD机试真题】 67、消消乐游戏

发布于:2024-10-10 ⋅ 阅读:(8) ⋅ 点赞:(0)

package main

import (
	"fmt"
	"strings"
)

func removeSameChar(charList []string) []string {

	subStrList := make([]string, 0)

	for i := 0; i < len(charList)-1; i++ {
		itemChars := make([]string, 0)
		itemChars = append(itemChars, charList[i])
		for j := i + 1; j < len(charList); j++ {
			if charList[i] == charList[j] {
				itemChars = append(itemChars, charList[j])
				subStrList = append(subStrList, strings.Join(itemChars, ""))
				i = j
			}
			break
		}
	}

	inputStr := strings.Join(charList, "")
	for _, subStr := range subStrList {
		inputStr = strings.ReplaceAll(inputStr, subStr, "")
	}

	charCount := len(inputStr)
	charListTemp := make([]string, charCount)
	for i, char := range inputStr {
		charListTemp[i] = string(char)
	}

	if len(charListTemp) == len(charList) {
		return charListTemp
	} else {
		return removeSameChar(charListTemp)
	}

}

func main() {
	var inputStr string
	fmt.Scan(&inputStr)
	charCount := len(inputStr)
	charList := make([]string, charCount)
	for i, char := range inputStr {
		charList[i] = string(char)
	}

	subList := removeSameChar(charList)
	fmt.Println(len(subList))

}

总结:题目要求只检测两个相同的字符,如果有多个相同的字符反而只消除头两个;另外可以使用堆栈的方式处理,空间复杂度会更低,后面有时间我再试试堆栈的方法