面试题01.01
题目描述:
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例:
解答:
class Solution:
def isUnique(self, astr: str) -> bool:
nastr=sorted(astr)
for i in range(len(astr)-1):
if nastr[i]==nastr[i+1]:
return False
return True
'''
利用set的不可重复性
class Solution:
def isUnique(self, astr: str) -> bool:
return len(set(astr)) == len(astr)
'''
面试题01.02
题目描述:
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例:
解答:
class Solution:
def CheckPermutation(self, s1: str, s2: str) -> bool:
return sorted(s1)==sorted(s2)
面试题01.03
题目描述:
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例:
解答:
class Solution:
def replaceSpaces(self, S: str, length: int) -> str:
return "%20".join(S[:length].split(" "))
面试题01.04
题目描述:
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例:
解答:
class Solution:
def canPermutePalindrome(self, s: str) -> bool:
'''
每个字符数量是偶数就能回文
最多只允许有一个奇数出现
'''
odd={
}
for ch in s:
if ch in odd.keys():
del odd[ch]
else:
odd[ch]=0
if len(odd.keys())>1:
return False
else:
return True
面试题01.05
题目描述:
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例:
解答:
class Solution:
def oneEditAway(self, first: str, second: str) -> bool:
l1=len(first)
l2=len(second)
if l1>l2:
s1=first
s2=second
else:
s1=second
s2=first
k=len(s2)
for i in range(0,len(s2)):
if s1[i]!=s2[i]:
k=i
break
return s1[k+1:]==s2[k:] or s1[k+1:]==s2[k+1:]