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
链接: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%????????我也是醉了