案例三
两串旋转练习题
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。
比如A=”12345”, A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。
对于两个字符串A和B,请判断A和B是否互为旋转词。
给定两个字符串A和B及他们的长度lena,lenb,请设计一个函数,返回一个bool值,代表他们是否互为旋转词。
class Solution():
def rotate(self,A,lena,B,lenb):
if lena != lenb:
return False
else:
C = A + A
if B in C:
return True
else:
return False
案例四
句子的逆序练习题
给定一个字符串str,请在单词间做逆序调整
举例:
‘pig loves dog’,逆序成’dog loves pig’
‘I’m a student’,逆序成’student a I’m’
解题思路:
将字符串转换成列表,进行列表的逆序
class Solution():
def reverseSentence(self,A):
listA = list(A)
listA.append(' ')
strA = ''
listB = []
for i in range(len(listA)):
if listA[i] != ' ':
strA = strA + listA[i]
elif listA[i] == ' ':
listB.append(strA)
strA = ''
listB.reverse()
return ' '.join(listB)
案例五
字符串移位练习题
给定一个字符串str,和一个整数i,i代表str中的位置。将str[0..i]移到右侧,str[i+1…N-1]移到左侧。
要求时间复杂度为O(n),空间复杂度为O(1)
测试用例:
str = “ABCDE”,i=2,调整为”DEABC”
解题思路:
将str[0..i]部分的字符逆序,变为CBADE
将str[i+1..n-1]部分的字符逆序,变为CBAED
将str[0..n-1]部分的字符逆序,变为DEABC
def move(A,i):
A = Reverse(A, 0, i)
A = Reverse(A, i+1, len(A)-1)
A = Reverse(A, 0, len(A)-1)
return A
def Reverse(A,left,right):
A = list(A)
while(left<right):
A[left], A[right] = A[right], A[left]
left += 1
right -= 1
return ''.join(A)
案例六
拼接最小字典序练习题
给定一个字符串类型的数组strs,请找到一种拼接顺序,
使得所有字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的,并返回这个大字符串
举例:
strs=[‘abc’,’de’],可以拼成’abcde’,也可以拼成’deabc’,但前者字典顺序更小,所以返回’abcde’
strs =[‘b’,’ba’],可以拼成’bba’,也可以拼成’bab’,但后者字典顺序更小,所以返回’bab’
class Solution():
def connect(self, strs):
if not strs:
return ''
for i in range(1,len(strs)):
for j in range(i):
if strs[i]+strs[j] < strs[j]+strs[i]:
strs[i],strs[j] = strs[j],strs[i]
return ''.join(strs)