实习--Day16

8/12

最近是感觉真的闲,刷刷题吧

判断字符是否唯一

链接:https://leetcode-cn.com/problems/is-unique-lcci/

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

输入: s = "leetcode"
输出: false 
示例 2:

输入: s = "abc"
输出: true

如果你不使用额外的数据结构,会很加分!!!,本来用python字典就很好做的,但是,现在要换一种了

for i in range(1,len(astr)):
     if i != astr.index(astr[i]):
           return False
return True

判定是否互为重排字符串

链接:https://leetcode-cn.com/problems/check-permutation-lcci/

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = "abc", s2 = "bca"
输出: true 
示例 2:

输入: s1 = "abc", s2 = "bad"
输出: false
说明:

0 <= len(s1) <= 100
0 <= len(s2) <= 100

from collections import Counter
def CheckPermutation(self, s1: str, s2: str) -> bool:
    dic = Counter(s1)
    if len(s1) != len(s2):
        return False
    for c in s2:
        if dic[c]:
            dic[c] -= 1
            if dic[c] < 0:
                return False
        else:
            return False
    return True

URL化

链接:https://leetcode-cn.com/problems/string-to-url-lcci/

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例1:

 输入:"Mr John Smith    ", 13
 输出:"Mr%20John%20Smith"
示例2:

 输入:"               ", 5
 输出:"%20%20%20%20%20"

其实不要看题目描述很复杂的样子,其实也就是字符串的替换

    def replaceSpaces(self, S: str, length: int) -> str:
        res = []
        for i in range(length):
            if S[i] == ' ':
                res.append('%20')
            else:
                res.append(S[i])
        return ''.join(res)

回文排列

链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci/

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。

 

示例1:

输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)

这题其实是简单的,我们只需要知道回文串的特点:每个字符都是出现偶数次,只允许一个字符出现奇数次

    def canPermutePalindrome(self, s: str) -> bool:
        C = collections.Counter(s)
        count = 0
        for k,v in C.items():
            if v % 2:
                count += 1
        return count <= 1

一次修改

链接:https://leetcode-cn.com/problems/one-away-lcci/

字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。

 

示例 1:

输入: 
first = "pale"
second = "ple"
输出: True
 

示例 2:

输入: 
first = "pales"
second = "pal"
输出: False

这题体现在删除,替换,添加一个字符,所以我们只要发现一个不一样的字符,后面的就可以根据不同的操作来做不同的判断

    # 要知道增删改的操作实质
    def oneEditAway(self, first: str, second: str) -> bool:
        a,b = len(first),len(second)
        if abs(a-b)>1:
            return False
        for i in range(min(a,b)):
            if first[i] == second[i]:
                continue
            else:
                return first[i+1:] == second[i+1:] or first[i:] == second[i+1:] or\ first[i+1:] == second[i:]
        return True

字符串压缩

链接:https://leetcode-cn.com/problems/compress-string-lcci/

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

 输入:"aabcccccaaa"
 输出:"a2b1c5a3"
示例2:

 输入:"abbccd"
 输出:"abbccd"
 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。

本来这题想用字典来做的,后面发现不行

    def compressString(self, S: str) -> str:
        ans = ''
        S += " " # 用于保证最后一个字符会输出
        cnt = 1
        for i in range(1,len(S)):
            if S[i] != S[i-1]:
                ans += S[i-1] + str(cnt)
                cnt = 1
            else:
                cnt += 1
        return ans if len(ans) < len(S.strip()) else S.strip()

 

下午有点事刚好可以参加shopee的笔试:

15道选择题:计算机相关的计算机网络,计算机组成,算法,概率论,离散数学的,数据库的,系统设计的(中间件位于7层网络结构的哪一层?)

3道编程题:这三道编程题是我最不想说的,题目都是leetcode上面的,找出连续数字中缺失的数字;字符串数据进行加法运算;数组的连续子序列的最大和,是不是都很熟悉?

但是坑壁的来了,不知道是不是编译器有问题,数组的连续子序列最大和那一题,因为可以在本地ide上面跑,我一开始的代码结果是错的,他给我case通过率40%,导致我一直在想要怎么改我的代码,拿到本地ide上面跑一下才知道都是错的,然后我改了代码,拿到本地运行,对了,copy到试卷上,case通过率0.00%????????我也是醉了

你可能感兴趣的:(杂项,数据分析)