• 【刷题】LeetCode刷刷刷 — 2021-06-01


    一、旋转字符串

    题目描述

    给定两个字符串, A 和 B。
    
    A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' 。
    如果在若干次旋转操作之后,A 能变成B,那么返回True。
    

    示例

    示例 1:
    输入: A = 'abcde', B = 'cdeab'
    输出: true
    
    示例 2:
    输入: A = 'abcde', B = 'abced'
    输出: false
    

    解题

    class Solution:
        def rotateString(self, s: str, goal: str) -> bool:
            return len(s) == len(goal) and goal in s + s
    

    由于s + s包含了所有可以通过旋转操作从 s 得到的字符串,
    因此我们只需要判断goal是否为s + s的子串即可。

    二、数组中出现次数超过一半的数字

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
    
    你可以假设数组是非空的,并且给定的数组总是存在多数元素。
    

    示例

    示例 1:
    
    输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
    输出: 2
    

    解题

    from collections import Counter
    
    class Solution:
        def majorityElement(self, nums: List[int]) -> int:
            n = len(nums)
            for k, v in dict(Counter(nums)).items():
                if v >= n / 2:
                    return k
    

    涉及到出现次数的,我优先还是使用了Counter。

    • Counter(nums),然后转为dict,方便k,v遍历。
    • 知道了数组长度n,遍历数组时候,判断出现次数v是否>= n / 2即可。

    如果不用Counter的话,也可以自己建一个字典,遍历下数组,把各数出现的次数统计到字典里去,剩下
    的就跟上面一样了。

    class Solution:
        def majorityElement(self, nums: List[int]) -> int:
            n = len(nums)
            hash_table = dict()
            for i in nums:
                if i in hash_table:
                    hash_table[i] = hash_table[i] + 1
                else:
                    hash_table[i] = 1
            for k, v in hash_table.items():
                if v >= n / 2:
                    return k
    

    三、反转字符串

    题目描述

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
    
    不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
    
    你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
    

    示例

    输入:["h","e","l","l","o"]
    输出:["o","l","l","e","h"]
    

    解题

    class Solution:
        def reverseString(self, s: List[str]) -> None:
            """
            Do not return anything, modify s in-place instead.
            """
            n = len(s)
            right = 0
            left = n - 1
            while right < left:
                s[right], s[left] = s[left], s[right]
                right += 1
                left -= 1
                if right >= left:
                    return s
    

    使用双指针,思路:

    • 指针right和指针left分别在输入数组s的两头。
    • right < left,就互相进行交互。然后右指针向左移动 +1,左指针向右移动 -1
    • right >= left,说明交换完毕。这里大于等于是考虑 数组长度为 偶数和奇数的情况。

    四、回文链表

    题目描述

    请判断一个链表是否为回文链表。
    

    示例

    示例 1:
    
    输入: 1->2
    输出: false
    示例 2:
    
    输入: 1->2->2->1
    输出: true
    

    解题

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def isPalindrome(self, head: ListNode) -> bool:
            temp_list = []
            cur = head
            while cur:
                temp_list.append(cur.val)
                cur = cur.next
            return temp_list == temp_list[::-1]
    
    

    回文链表是啥?就是链表反顺序过来还和之前的一样。那么,如果把链表中的元素都放到数组里,如果这个数组和反序的数组一样,
    就说明了这个是回文链表了。

    • 声明一个数组temp_list
    • 声明一个辅助指针cur,指向head
    • 遍历链表,把每个元素的值添加到数组中,temp_list.append(cur.val)
    • 然后指针继续向后移动,cur = cur.next
    • 最后比较数组与反序数组是否相等。

    五、回文数

    题目描述

    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
    
    回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
    

    示例

    示例 1:
    
    输入:x = 121
    输出:true
    示例 2:
    
    输入:x = -121
    输出:false
    解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
    

    解题

    class Solution:
        def isPalindrome(self, x: int) -> bool:
            if x < 0:
                return False
            str_x = str(x)
            return str_x == str_x[::-1]
    

    跟上面回文链表解法一致,注意下负数直接返回Fasle。

    • 将int转为字符串
    • 比较字符串和反序字符串是否一致。
    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    oracle 数据库、实例、服务名、SID
    查看oracle数据库服务器的名字
    oracle表复制
    Oracle 备份、恢复单表或多表数据步骤
    如何查询一个表中有哪些列全为空
    mysql当查询某字段结果为空并赋值
    NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装
    《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构
    《大型网站技术架构》读书笔记三:大型网站核心架构要素
    《大型网站技术架构》读书笔记二:大型网站架构模式
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/14836773.html
Copyright © 2020-2023  润新知