面试题记录一

一.字符串逆序打印,比如给出字符串“abcdefg”,要求逆序打印输出“gfedcba”。

完整代码如下:

package main

import "fmt"

func main()  {
	str := "abcdefg"

	fmt.Println("原本字符串:",str)
	fmt.Println("方法一逆序后:",way1(str))
	fmt.Println("方法二逆序后:",way2(str,0,len(str)-1))

}

//方法一
func way1(str string) string {

	bb := []byte(str)
	result := make([]byte,0)
	for i := len(bb)-1 ;i >=0;i--{
		result=append(result,bb[i])
	}

	strbb := string(result)
	return strbb
}

//方法二
func way2(str string,front int,end int) string {

	bs := []byte(str)
	for front < end{

		bs[front],bs[end]=bs[end],bs[front]
		front++
		end--

	}

	strbs := string(bs)
	return strbs
}

执行结果:

二. 实现句子反转,比如给出“I am a student”,打印输出“student a am I”。完整代码如下:

package main

import "fmt"

func main()  {

	str :="I am a student"

	fmt.Println("原本字符串:",str)
	fmt.Println("句子反转后:",word(str))

}

//整个句子反转
func sentence(bs []byte,front int,end int) {

	for front < end{

		bs[front],bs[end]=bs[end],bs[front]
		front++
		end--

	}
}

//单词反转
func word(str string) string {

	by:=[]byte(str) //将传入的字符串转为切片

	sentence(by,0,len(by)-1) //将切片中的字符串全部逆序

	begin := 0
	for i:=0;i<len(by);i++  {
		if by[i] == 32 {
			sentence(by,begin,i-1)
			begin = i+1
		}
	}
	return string(by)

}

 执行结果:

三.给出字符串,实现去重。代码如下: 

package main

import (
	"fmt"
	"sort"
)

func main() {
	var arr = []string{"hello", "hello","hi", "world", "hi", "china", "hello", "hi"}
	d := Remove(arr)
	fmt.Println(d)
	sort.Strings(d)
	fmt.Println(d)
}

//去除重复字符串
func Remove(arr []string)  []string {

	result := make([]string, 0)  //创建一个切片用于存放去重后的结果

	for i,_ := range arr{
		flag := true
		for j,_ := range result{
			if arr[i] == result[j] {
				flag = false  // 存在重复元素,标识为false
				break
			}
		}

		if flag {
			result = append(result, arr[i])
		}
	}
	return result
}

执行结果:

四. 两个goroutine携程交互打印1,2,3.....10。代码如下:

package main

import (
	"fmt"
	"time"
)

func groutine1(ch chan int,flag chan bool) {

	for i := 1; i <= 10; i++ {
		ch <- 100
		if i%2 == 1 {
			fmt.Println("groutine-1:", i)
		}
		flag <- true
	}

}

func groutine2(ch chan int,flag chan bool) {

	for i := 1; i <= 10; i++ {
		<-ch
		<-flag
		if i%2 == 0 {
			fmt.Println("groutine-2:", i)
		}
	}
}

func main() {
	ch := make(chan int)
	flag :=make(chan bool)

	go groutine1(ch,flag)
	go groutine2(ch,flag)

	time.Sleep(time.Second * 10)

}



执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值