Golang每日一练(leetDay0116) 路径交叉、回文对

这篇具有很好参考价值的文章主要介绍了Golang每日一练(leetDay0116) 路径交叉、回文对。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

目录

335. 路径交叉 Self-crossing  🌟🌟🌟

336. 回文对 Palindrome Pairs  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


335. 路径交叉 Self-crossing

给你一个整数数组 distance 

从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3] 米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。

判断你所经过的路径是否相交。如果相交,返回 true ;否则,返回 false 。

示例 1:

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

输入:distance = [2,1,1,2]
输出:true

示例 2:

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

输入:distance = [1,2,3,4]
输出:false

示例 3:

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

输入:distance = [1,1,1,1]
输出:true

提示:

  • 1 <= distance.length <= 10^5
  • 1 <= distance[i] <= 10^5

代码:

package main

import "fmt"

func isSelfCrossing(distance []int) bool {
    n := len(distance)
    if n <= 3 {
        return false
    }

    for i := 3; i < n; i++ {
        // 第四条边与第一条边相交
        if distance[i] >= distance[i-2] && distance[i-1] <= distance[i-3] {
            return true
        }
        // 第五条边与第一条边重叠或者相交
        if i >= 4 && distance[i-1] == distance[i-3] && distance[i]+distance[i-4] >= distance[i-2] {
            return true
        }
        // 第六条边与第一条边相交
        if i >= 5 && distance[i-2]-distance[i-4] >= 0 && distance[i]+distance[i-4] >= distance[i-2] && distance[i-1]-distance[i-3] >= 0 && distance[i-1]-distance[i-3] <= distance[i-5] && distance[i-2]-distance[i-4] <= distance[i-1]-distance[i-3] {
            return true
        }
    }

    return false
}

func main() {
	distance := []int{2,1,1,2}
	fmt.Println(isSelfCrossing(distance ))

	distance = []int{1,2,3,4}
	fmt.Println(isSelfCrossing(distance ))

	distance = []int{1,1,1,1}
	fmt.Println(isSelfCrossing(distance ))
}

输出:

true
false
true


336. 回文对 Palindrome Pairs

给定一组 互不相同 的单词, 找出所有 不同 的索引对 (i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串。

示例 1:

输入:words = ["abcd","dcba","lls","s","sssll"]
输出:[[0,1],[1,0],[3,2],[2,4]] 
解释:可拼接成的回文串为 ["dcbaabcd","abcddcba","slls","llssssll"]

示例 2:

输入:words = ["bat","tab","cat"]
输出:[[0,1],[1,0]] 
解释:可拼接成的回文串为 ["battab","tabbat"]

示例 3:

输入:words = ["a",""]
输出:[[0,1],[1,0]]

提示:

  • 1 <= words.length <= 5000
  • 0 <= words[i].length <= 300
  • words[i] 由小写英文字母组成

代码:

package main

import "fmt"

func palindromePairs(words []string) [][]int {
    res := [][]int{}
    wordIndexMap := map[string]int{}

    for i, word := range words {
        wordIndexMap[word] = i
    }

    for i, word := range words {
        for j := 0; j <= len(word); j++ {
            prefix := word[:j]
            suffix := word[j:]

            if isPalindrome(prefix) {
                reverseSuffix := reverseString(suffix)
                if idx, ok := wordIndexMap[reverseSuffix]; ok && idx != i {
                    res = append(res, []int{idx, i})
                }
            }

            if isPalindrome(suffix) {
                reversePrefix := reverseString(prefix)
                if idx, ok := wordIndexMap[reversePrefix]; ok && idx != i && len(suffix) > 0 {
                    res = append(res, []int{i, idx})
                }
            }
        }
    }

    return res
}

func isPalindrome(s string) bool {
    i, j := 0, len(s)-1
    for i < j {
        if s[i] != s[j] {
            return false
        }
        i++
        j--
    }
    return true
}

func reverseString(s string) string {
    res := ""
    for i := len(s) - 1; i >= 0; i-- {
        res += string(s[i])
    }
    return res
}

func main() {
    words := []string{"abcd","dcba","lls","s","sssll"}
    fmt.Println(palindromePairs(words))

    words = []string{"bat","tab","cat"}
    fmt.Println(palindromePairs(words))

    words = []string{"a", ""}
    fmt.Println(palindromePairs(words))
}

输出:

[[1 0] [0 1] [3 2] [2 4]]

[[1 0] [0 1]]

[[0 1] [1 0]]

暴力循环:

package main

import "fmt"

func palindromePairs(words []string) [][]int {
    res := [][]int{}
    for i := 0; i < len(words); i++ {
        for j := i + 1; j < len(words); j++ {
            if isPalindrome(words[i] + words[j]) {
                res = append(res, []int{i, j})
            }
            if isPalindrome(words[j] + words[i]) {
                res = append(res, []int{j, i})
            }
        }
    }
    return res
}

func isPalindrome(s string) bool {
    i, j := 0, len(s)-1
    for i < j {
        if s[i] != s[j] {
            return false
        }
        i++
        j--
    }
    return true
}

func main() {
    words := []string{"abcd","dcba","lls","s","sssll"}
    fmt.Println(palindromePairs(words))
    // 输出: [[0 1] [1 0] [3 2] [2 4]]

    words = []string{"bat","tab","cat"}
    fmt.Println(palindromePairs(words))
    // 输出: [[0 1] [1 0]]

    words = []string{"a", ""}
    fmt.Println(palindromePairs(words))
    // 输出: [[0 1] [1 0]]
}

🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

Golang每日一练 专栏

(2023.3.11~)更新中...

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Golang每日一练(leetDay0116) 路径交叉、回文对,# Go Leetcode,golang,leetcode

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更文章来源地址https://www.toymoban.com/news/detail-533426.html

到了这里,关于Golang每日一练(leetDay0116) 路径交叉、回文对的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang每日一练(leetDay0004)

    目录 10. 正则表达式匹配 Regular Expression Matching  🌟🌟🌟 11. 盛最多水的容器 Container with most water  🌟🌟 12. 整数转罗马数字 Integer to Roman  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个字符串 

    2023年04月08日
    浏览(28)
  • Golang每日一练(leetDay0031)

    目录 91. 解码方法  Decode Ways  🌟🌟 93. 复原 IP 地址 Restore IP Addresses  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 注:92.题 移到206.题之后 92. 反转链表 II Reverse Linked List II 一条包含字母  A-Z  的消息通过以

    2023年04月19日
    浏览(59)
  • Golang每日一练(leetDay0049) 二叉树专题(9)

    目录 144. 二叉树的前序遍历 Binary-tree Preorder Traversal  🌟 145. 二叉树的前序遍历 Binary-tree Postorder Traversal  🌟 对比: 94. 二叉树的中序遍历 Binary-tree Inorder Traversal  🌟 146. LRU缓存 LRU Cache  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一

    2024年02月04日
    浏览(32)
  • Golang每日一练(leetDay0102) 删除无效的括号、累加数

    目录 295. 数据流的中位数 Find-median-from-data-stream 🌟🌟🌟 301. 删除无效的括号 Remove Invalid Parentheses 🌟🌟🌟 306. 累加数 Additive Number 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 中位数 是有

    2024年02月10日
    浏览(32)
  • Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏

    目录 289. 生命游戏 Game Of Life  🌟🌟 292. Nim 游戏 Nim Game  🌟 299. 猜数字游戏 Bulls and Cows  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 生命游戏   是英国数学家约翰·何顿·康威在 1970 年发

    2024年02月09日
    浏览(28)
  • Golang每日一练(leetDay0065) 位1的个数、词频统计

    目录 191. 位1的个数 Nnumber of 1-bits  🌟 192. 统计词频 Word Frequency  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为

    2024年02月06日
    浏览(51)
  • Golang每日一练(leetDay0061) 表列序号、阶乘后的零

    目录 171. Excel 表列序号 Excel Sheet Column Number  🌟 172. 阶乘后的零 Factorial Trailing Zeroes  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个字符串  columnTitle  ,表示 Excel 表格中的列名称。返回  该列名称对

    2024年02月04日
    浏览(42)
  • Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数

    目录 278. 第一个错误的版本 First Bad Version  🌟 279. 完全平方数 Perfect Squares  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你

    2024年02月09日
    浏览(41)
  • Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列

    目录 332. 重新安排行程 Reconstruct Itinerary  🌟🌟🌟 334. 递增的三元子序列 Increasing Triplet Subsequence 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一份航线列表  tickets  ,其中  tickets[i]

    2024年02月16日
    浏览(35)
  • Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离

    目录 70. 爬楼梯 Climbing Stairs  🌟 71. 简化路径 Simplify Path  🌟🌟 72. 编辑距离 Edit Distance  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 假设你正在爬楼梯。需要  n  阶你才能到达楼顶。

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包