day6 力扣公共前缀--go实现---对字符串的一些思考

今日份知识:

curl -x 指定方法名  请求的url -d  请求体body里面的内容 //curl命令
curl -x Get 127.0.0.1:8080/add/user -d jinli

curl如果不指定方法,默认使用get方法,在go里面,get方法到底可以不可以把内容数据写在body里面传递呢

其实是可以的,通常如果我们使用get方法,都是把参数写在url里面,是否支持这个需要看具体的浏览器是否支持,例如google好像就不支持,但是自己写个webui,然后使用curl -x Get去获取body的话是可以获取到的,

但是RFC7231不鼓励这样的方式,所以这样的方式还是有可能读不到的

get方法是幂等性的,post不是幂等的

今日份力扣:14 最长前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。

提示:

1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成

今日份思考:使用go实现

字符串和数组其实很像,字符串在go里面一旦定义就无法更改,所以我们想改变字符串,就要拼接,替换等操作,那么也就会出现很多已经写好的api,比如go可以使用+号连接,可以使用fmt.Sprintf,可以使用strings里面的aip,可以使用buffer.strings等函数,

func commentPerf(str []string) string {
	if str == nil || len(str) == 0 {
		return ""
	}
	temp := ""
	for i := 0; i < len(str[0]); i++ {
		for j := 1; j < len(str); j++ {
			if i >= len(str[j]) || str[j][i] != str[0][i] {
				return temp
			}
		}
		temp = temp + string(str[0][i])
	}
	return temp
}

下面是go实现具体demo

+:会对字符串进行遍历,计算并开辟一个新的空间来存储原来的两个字符串。

```go
func main() {
	a := "nihao"
	b := "hello"
	fmt.Println(a + b)
}

Sprintf:必须要用反射获取值,因此有性能损耗

func main() {
	a := "nihao"
	b := "hello"
	c := fmt.Sprintf("%s,%s", a, b)
	fmt.Println(c)
}

strings.Builder:里面维护了一个可变的字节缓冲区,不用创建新的字符串变量,可以直接往缓冲区增加字符串、字符或字节片段,它是直接把[]byte转换为string,从而避免变量拷贝

type Builder struct {
    addr *Builder
    buf  []byte
}

func main() {
	a := "nihao"
	b := "hello"
	var bulid strings.Builder
	bulid.WriteString(a)
	bulid.WriteString(" ")
	bulid.WriteString(b)
	c := bulid.String()
	fmt.Println(c)
}

bytes.Buffer:字节缓冲器,里面存放都是byte,使用 bytes.Buffer 时,可以避免频繁地创建新的字符串变量,从而减少内存分配,也避免变量拷贝

type Buffer struct {
    buf      []byte
    off      int
    lastRead readOp
}

func main() {
	a := "nihao"
	b := "hello"
	var bytes bytes.Buffer
	bytes.WriteString(a)
	bytes.WriteString(" ")
	bytes.WriteString(b)
	c := bytes.String()
	fmt.Println(c)
}

strings.Join:自定义分隔符,适用对象[]string类型,因为我们传入切片长度固定,所以提前进行容量分配可以减少内存分配

func main() {
	a := []string{"nihao", "hello"}
	c := strings.Join(a, "+")
	fmt.Println(c)
}

你可能感兴趣的:(go打卡学习集合,golang,算法,go)