python列表元組練習

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章