字符串系列
- 一、520. 检测大写字母
- 二、面试题 01.01. 判定字符是否唯一
- 三、面试题 01.02. 判定是否互为字符重排
- 四、面试题 01.03. URL化
- 五、面试题 01.04. 回文排列
- 六、面试题 01.09. 字符串轮转
一、520. 检测大写字母
简单
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如 “USA” 。
单词中所有字母都不是大写,比如 “leetcode” 。
如果单词不只含有一个字母,只有首字母大写, 比如 “Google” 。
给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。
示例 1:
输入:word = “USA”
输出:true
示例 2:
输入:word = “FlaG”
输出:false
根据题目要求,若单词的大写用法正确,则需要满足:
若第 1 个字母为大写,则其他字母必须均为大写或均为小写,即其他字母必须与第 2 个字母的大小写相同;
若第 1 个字母为小写,则其他字母必须均为小写。
istitle() 方法用于检查字符串是否符合标题文本的格式,即每个单词的首字母都是大写字母,其余字母都是小写字母或不是字母。如果字符串符合标题文本格式,则返回 True,否则返回 False。
def func520(word):
return word.isupper() or word.islower() or word.istitle()
word = "FlaG"
print(func520(word))
二、面试题 01.01. 判定字符是否唯一
简单
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = “leetcode”
输出: false
示例 2:
输入: s = “abc”
输出: true
思路:通过set方法得到的集合的长度与s的长度进行对比
def func0101(s):
return len(set(s)) == len(s)
s = "abc"
print(func0101(s))
三、面试题 01.02. 判定是否互为字符重排
简单
给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = “abc”, s2 = “bca”
输出: true
示例 2:
输入: s1 = “abc”, s2 = “bad”
输出: false
思路:如果字符串s1和s2的字符个数一样,则可以重新排列变成另一个字符串
def func0102(s1, s2):
ss1 = Counter(s1)
ss2 = Counter(s2)
if ss1 == ss2:
return True
return False
s1 = "abc"
s2 = "bad"
res = func0102(s1, s2)
print(res)
四、面试题 01.03. URL化
简单
提示
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例 1:
输入:"Mr John Smith "
, 13
输出:"Mr%20John%20Smith"
示例 2:
输入:" "
, 5
输出:"%20%20%20%20%20"
def fun1(s):
s1=s[:13].replace(' ','%20')
return s1
s="Mr John Smith "
res=fun1(s)
print(res)
五、面试题 01.04. 回文排列
简单
提示
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。
示例1:
输入:“tactcoa”
输出:true(排列有"tacocat"、“atcocta”,等等)
思路:如果字符串中的字符为奇数个,并且超过1个,则为False
def func0104(s):
res = Counter(s)
odd = 0
for val in res.values():
if val % 2 == 1:
odd += 1
if odd > 1:
return False
return True
s = "tactcoa"
r = func0104(s)
print(r)
六、面试题 01.09. 字符串轮转
简单
提示
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
示例1:
输入:s1 = “waterbottle”, s2 = “erbottlewat”
输出:True
示例2:
输入:s1 = “aa”, s2 = “aba”
输出:False
思路:如果字符串A经过多次旋转之后得到字符串B,那么字符串A拼接后再去掉首尾各一位后一定包含字符串B
def func0109(s1, s2):
return s2 in (s1 + s1)[1:-1]
s1 = "aa"
s2 = "aba"
print(func0109(s1, s2))