自学内容网 自学内容网

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

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))

}

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


原文地址:https://blog.csdn.net/u014381782/article/details/142761602

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!