From be7fd6753a8b2a00ce24f1766c67e13f1d6ef69f Mon Sep 17 00:00:00 2001 From: freshield Date: Fri, 8 Dec 2023 06:56:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=AB=A0=E8=8A=82=20->=20=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E6=95=B0=E5=AD=97=E7=9A=84GO=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E5=8F=8C=E6=8C=87=E9=92=88=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/kama54.替换数字.md | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/problems/kama54.替换数字.md b/problems/kama54.替换数字.md index d5abbc4d..a7e0c7f0 100644 --- a/problems/kama54.替换数字.md +++ b/problems/kama54.替换数字.md @@ -183,6 +183,54 @@ func main(){ fmt.Printf(string(strByte)) } ```` +Go使用双指针解法 +````go +package main + +import "fmt" + +func replaceNumber(strByte []byte) string { + // 查看有多少字符 + numCount, oldSize := 0, len(strByte) + for i := 0; i < len(strByte); i++ { + if (strByte[i] <= '9') && (strByte[i] >= '0') { + numCount ++ + } + } + // 增加长度 + for i := 0; i < numCount; i++ { + strByte = append(strByte, []byte(" ")...) + } + tmpBytes := []byte("number") + // 双指针从后遍历 + leftP, rightP := oldSize-1, len(strByte)-1 + for leftP < rightP { + rightShift := 1 + // 如果是数字则加入number + if (strByte[leftP] <= '9') && (strByte[leftP] >= '0') { + for i, tmpByte := range tmpBytes { + strByte[rightP-len(tmpBytes)+i+1] = tmpByte + } + rightShift = len(tmpBytes) + } else { + strByte[rightP] = strByte[leftP] + } + // 更新指针 + rightP -= rightShift + leftP -= 1 + } + return string(strByte) +} + +func main(){ + var strByte []byte + fmt.Scanln(&strByte) + + newString := replaceNumber(strByte) + + fmt.Println(newString) +} +````