题目:给定字符串A、B,B为A排序后的结果,设计一算法验证A、B内容是否一致。
要求:
-
大小写为不同字符(考虑空格对算法精度的影响)。
-
输入字符串A、B,返回bool,true为相同,false为不同。
-
字符串A、B长度小于或等于5000。
解答:先验证字符串A、B长度小于或等于5000,之后只需要循环遍历B中的字符在A中是否都存在。
案例如下:
package main
import "strings"
func ABIsSame(strA, strB string) bool {
ARune, BRune := []rune(strA), []rune(strB)
if len(ARune) > 5000 || len(BRune) > 5000 || len(ARune) != len(BRune) {
return false
}
for _, val := range BRune {
if strings.Count(strB, string(val)) != strings.Count(strA, string(val)) {
return false
}
}
return true
}
上述代码核心是用Golang内置方法strings.Count验证字符是否⼀致。
题目:设计⼀个算法判断字符串中所有字符【是否全都不同】。指定⼀个string,返回bool,true意为所有字符全都不相同,false意为存在相同字符,字符串必须为ASCII字符,字符串长度小于或等于3000。
要求:不允许使⽤额外的存储结构。
要点分析:
-
ASCII字符,⼀共有256个,其中128个是常用字符,可在键盘输入,其它是键盘上没有的。
-
全部不相同,意为字符串中的字符没有重复的,也可以理解为这个字符串的字符是否都是只出现一次。
-
不准使用额外的储存结构,且字符串小于或等于3000。
根据分析,我们可以使用Golang内置函数来实现,有AB两种方式。
案例如下:
package main
import "strings"
// A方案:strings.Count函数处理
func IsUniqueStringA(str string) bool {
if strings.Count(str, "") > 3000 {
return false
}
for _, val := range str {
if val > 127 {
return false
}
if strings.Count(str, string(val)) > 1 {
return false
}
}
return true
}
// B方案:strings.Count、 strings.Index、 strings.Index函数处理
func IsUniqueStringB(str string) bool {
if strings.Count(str, "") > 3000 {
return false
}
for key, val := range str {
if val > 127 {
return false
}
if strings.Index(str, string(val)) != key {
return false
}
}
return true
}
上述代码中A用的是golang内置方法strings.Count用以判断字符串中包含的另外一个字符串的数量,B用的是golang内置方法strings.Index和 strings.LastIndex ,用以判断指定字符串在另⼀字符串的索引位置,分别是第⼀次发现位置和最后发现位置。
扫码关注公众号获取更多内容。。。


938

被折叠的 条评论
为什么被折叠?



