从零开始的力扣刷题记录-第八十三天

文章介绍了四道力扣(LeetCode)的编程题,包括检查单词是否为句中其他单词的前缀、删除每行中的最大值、救生艇问题和反转字符串中的单词。题解分别提供了Go语言的实现,强调了排序、双指针和字符串处理等策略。
摘要由CSDN通过智能技术生成

1455. 检查单词是否为句中其他单词的前缀

题目描述:
给你一个字符串 sentence 作为句子并指定检索词为 searchWord ,其中句子由若干用 单个空格 分隔的单词组成。请你检查检索词 searchWord 是否为句子 sentence 中任意单词的前缀。
如果 searchWord 是某一个单词的前缀,则返回句子 sentence 中该单词所对应的下标(下标从 1 开始)。如果 searchWord 是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。如果 searchWord 不是任何单词的前缀,则返回 -1 。
字符串 s 的 前缀 是 s 的任何前导连续子字符串

题解:
直接模拟即可

代码(Go):

func isPrefixOfWord(sentence string, searchWord string) int {
    s := strings.Split(sentence," ")
    for re,v := range s{
        for i,b := range searchWord{
            if len(v) < len(searchWord) || rune(v[i]) != b{
                break
            }else if i == len(searchWord) - 1{
                return re + 1
            }
        }
    }
    return -1
}

2500. 删除每行中的最大值

题目描述:
给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。
执行下述操作,直到 grid 变为空矩阵:
从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。
将删除元素中的最大值与答案相加。
注意 每执行一次操作,矩阵中列的数据就会减 1 。
返回执行上述操作后的答案。

题解:
和前几天做过一个行列一起删的差不多,这个更简单,直接排序后按列删除即可

代码(Go):

func deleteGreatestValue(grid [][]int) int {
    re := 0
	for _,v := range grid {
		sort.Ints(v)
	}
	for i,_ := range grid[0] {
		temp := 0
		for _,v := range grid {
			temp = max(temp,v[i])
		}
		re += temp
	}
	return re
}

func max(x int, y int) int { 
    if x > y{ 
        return x
    }
    return y
}

881. 救生艇

题目描述:
给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回 承载所有人所需的最小船数 。

题解:
排序后双指针向中间靠拢,如果装不下就让重量大的单独一船,否则就让二人同船,这样就可以保证需要的船最少

代码(Go):

func numRescueBoats(people []int, limit int) int {
    sort.Ints(people)
    re := 0
    l,r := 0, len(people) - 1
    for l <= r {
        if people[l] + people[r] > limit {
            r--
        }else{
            l++
            r--
        }
        re++
    }
    return re
}

151. 反转字符串中的单词

题目描述:
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

题解:
go直接调字符串分割函数然后倒序遍历即可,只需要注意一下前后的空格

代码(Go):

func reverseWords(s string) string {
    temp := strings.Split(s," ")
    var re string
    for i := len(temp) - 1;i >= 0;i--{
        if temp[i] != ""{
            if re != ""{
                re += " "
            }
            re += temp[i]
        }
    }
    return re
}

总结

终于追上进度了,接下来感觉要补补理论,现在题做着越来越费劲了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值