1.最後一個單詞的長度:(字符串)
題目描述:給定一個僅包含大小寫字母和空格 ' ' 的字符串,返回其最後一個單詞的長度。
如果不存在最後一個單詞,請返回 0 。
說明:一個單詞是指由字母組成,但不包含任何空格的字符串。
示例: 輸入: "Hello World"
輸出: 5
思路:1.首先排除不是單詞的輸入;
2.其次讓輸入的字符串先用切片分隔開;
3. 反轉字符串,從反轉後的字符串的第一個元素開始遍歷,遇到第一個空格結束,並輸出長度
string = input("請輸入包含大小寫字母和空格的字符串:") #例如輸入‘hello world’
if string == ' ' or not string: #如果輸入爲空或者只有空格,輸出0
print(0)
else:
item_string = string.split(' ') #用切片經字符串以空格分開
#print(item_string) #輸出是['hello', 'world']
print (len(item_string[::-1][0])) #先將列表反轉['python', 'hello'],再遍歷第一個元素的長度
2.刪除字符串中重複的字母:(字符串)
牛牛有一個由小寫字母組成的字符串s,在s中可能會有依稀字母重複出現;
但牛牛不喜歡重複,對於同一個字母,她只想保留第一次出現並刪除掉後面出現的字母;
輸入一個字符串s,s的長度 1 <= length <= 1000,s中的每個字符都是小寫英文字母,請幫牛牛完成對s的操作 。
示例:輸入:banana
輸出:ban
思路:1.輸入一個字符串s,再定義一個空字符串items用來裝不重複的字符串
2.s的長度 1 <= length <= 1000,s中的每個字符都是小寫英文字母,設置變量i如果不在items,則把變量i放入items
3.輸出items
s = input("請輸入字符串:")
items = " " #定義一個空字符串
if 1 <= len(s) <= 1000 and s.islower(): #字符串s的長度大於等於1小於等於100,且必須爲小寫
for i in s:
if i not in items:
items += i
print(items)
3.[吉比特校招編程題]桌面數字混合排序
描述:
字符串的 for 循環
字符串的常用判別函數: isdigit()、isalpha()
分支流程控制
自學內容: sorted 內置方法實現排序
number=input('請輸入字符串:')#輸入數字
b=[]#定義b
c=[]#定義c
for i in number:#遍歷其中所有數據
if i.isdigit():
b.append(int(i))#在數字尾部加上元素
elif i.isalpha():
c.append(str(i))#在字母尾部加上元素
b.sort()#將數字從小到大排列
c.sort()#將字母從a-z排列
d=[]
d=c+b#合併數字、字母兩個列表
e = [str(j) for j in d]
f=''.join(e)#將列表中的元素拼接到一起
print(f)
4.兩數之和(列表,前提是己經排好序的列表)
描述:
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因爲 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]
思路:
1.用一個嵌套循環把nums列表遍歷兩次
代碼:
class Solution:
def twoSum(self,nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
#用len()方法取得nums列表的長度
n = len(nums)
#x取值從0一直到n(不包括n)
for x in range(n):
#y取值從x+1一直到n(不包括n)
#用x+1是減少不必要的循環,y的取值肯定是比x大
for y in range(x+1,n):
#假如 target-nums[x]的某個值存在於nums中
if nums[y] == target - nums[x]:
#返回x和y
return x,y
break
else:
continue
5.刪除數組重複項(列表)
描述:給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。
示例 1:
給定數組 nums = [1,1,2],
函數應該返回新的長度 2, 並且原數組 nums 的前兩個元素被修改爲 1, 2。
你不需要考慮數組中超出新長度後面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函數應該返回新的長度 5, 並且原數組 nums 的前五個元素被修改爲 0, 1, 2, 3, 4。
你不需要考慮數組中超出新長度後面的元素。
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
length=len(nums)
count=0
for i in range(1,length):
if nums[count]!=nums[i]:
nums[count+1]=nums[i]
count+=1
return count+1
6.旋轉數組:
描述:給定一個數組,將數組中的元素向右移動 k 個位置,其中 k 是非負數。
示例 1:
輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右旋轉 1 步: [7,1,2,3,4,5,6]
向右旋轉 2 步: [6,7,1,2,3,4,5]
向右旋轉 3 步: [5,6,7,1,2,3,4]
全部翻轉:7 6 5 4 3 2 1 前k旋轉:5 6 7 4 3 2 1 後k旋轉:5 6 7 1 2 3 4
示例 2:
輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋:
向右旋轉 1 步: [99,-1,-100,3]
向右旋轉 2 步: [3,99,-1,-100]
說明:儘可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
要求使用空間複雜度爲 O(1) 的 原地 算法。
思路:
1.三個翻轉 , 整體翻轉, 前k
翻轉,後k
翻轉
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k %= n
nums[:] = nums[::-1]
nums[:k] = nums[:k][::-1]
#print(nums)
nums[k:] = nums[k:][::-1]
print(nums)
參考自https://blog.csdn.net/daidadeguaiguai/article/details/103393717