1. 程式人生 > >LeetCode013 : 反轉字串中的單詞 III

LeetCode013 : 反轉字串中的單詞 III

一、寫在前面

LeetCode 第十二題反轉字串傳輸門:LeetCode012 : 反轉字串
今天給大家分享的是LeetCode 陣列與字串 第十三題:反轉字串中的單詞 III,為面試而生,期待你的加入。
“Use the utility in the API is recommended in the project. But if you use it in an interview, you will definitely fail .”

二、今日題目

給定一個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。
示例:

輸入: "Let's take LeetCode contest"
輸出: "s'teL ekat edoCteeL tsetnoc"

注意
在字串中,每個單詞由單個空格分隔,並且字串中不會有任何額外的空格。

三、 分析

這個題目,看到第一眼,感覺有點難,我一看到題目,還以為是一個字串裡有英文單詞,只用識別英文單詞,然後把英文單詞逆轉就好,後來仔細一看,是一段只由英文單詞和空格組成的字串,這樣的話,就簡單了很多,具體思路如下圖所述:
思路

四、解題

1.快捷的方法:

時間複雜度:O(n)
畢竟還是得把每個單詞都遍歷一遍~

class Solution(object):
	def reverseWords(self, s):
		"""
		:type s: str
		:rtype: str
		"""
# 根據空格,把字串分隔開 r_list = s.split(" ") # 把列表每個單詞字串逆轉 for i in range(len(r_list)): r_list[i] = r_list[i][::-1] # 用 “ ” 連線列表的每個單詞 result_s = " ".join(r_list) return result_s

(1)切片/join操作,前一篇Python小知識 | 這些技能你不會?(一)有較詳細介紹。
(2)split函式
Python split((str, num) 通過指定分隔符對字串進行切片,如果引數 num 有指定值,則僅分隔 num 個子字串。
引數介紹:

str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、製表符(\t)等。
num -- 分割次數。

(3)提交結果
提交結果

測試資料:30組
執行時間:32ms
擊敗人百分比:94.56%

2.自己動手,豐衣食足?

遍歷,分組都自己動手實現
時間複雜度:O(n)

class Solution1(object):
	def reverseWords(self, s):
		"""
		:type s: str
		:rtype: str
		"""
		# 根據空格,把字串分隔開
		s = s + ' '
		r_list = []
		word = ''
		flag = 0
		for i in s:
			if i != " ":
				word = word + i
				flag = 1
			else:
				if flag == 1:
					r_list.append(word)
					word = ''
					flag = 0
		
		# 把列表每個單詞字串逆轉
		for i in range(len(r_list)):
			r_list[i] = self.reverseString(r_list[i])
			
		# 用 “ ” 連線列表的每個單詞
		result_s = ''
		for i in range(len(r_list)):
			if i == len(r_list)-1:
				result_s = result_s + r_list[i]
				break
			result_s = result_s + r_list[i] + " "
		
		return result_s
	
	# leetcode12中自己實現字串逆轉
	def reverseString(self, s):
		"""
		:type s: str
		:rtype: str
		"""
		result = list(s)
		for i in range(len(result)//2):
			temp = result[len(result)-i-1]
			result[len(result)-i-1] = result[i]
			result[i] = temp
		return ''.join(result)
  • 提交結果
    提交結果

測試資料:30組
執行時間:204ms
擊敗人百分比:2.89%

雖然beat的人不多,但我有想法,我驕傲啊~
感覺很酷,感覺很努力,現實很殘酷,有沒有這種感覺?

五、疑惑

昨天立冬,天氣是真的變冷了,大家要記得多穿衣服,別感冒哦~
不要忘記學習,不要忘記學習,不要忘記學習。

最近廣告[互推和廣告]有點多,乾貨比較少,希望大家諒解,說幾點感悟:
第一,互推,為了公眾號能越做越好,必不可少的,個人的能力有限,不能每一篇文章都是爆文,所以見諒,而且我一般互推也都是python公眾號,都是做公眾號認識的朋友,所以才誠心推薦給大家的;

第二,接商業廣告,學生黨,花時間運營公眾號不簡單,做一篇推文可能花的5,6個小時,剛開始花兩三天也是常有的事,生活不易,有合適的,不錯的廣告商,每一個廣告商我都是深入瞭解了的,至少沒有騙錢圈錢的機構,這樣賺點生活費,我覺得不為過吧;

第三,關於文末雞腿,點贊,轉發,留言的事情,的確少的可憐,所以希望大家以後點開推文多幫幫忙,點一下,可能這篇推文你學到的很少,說不定下篇就能學很多了呢?

第四,交流群,目前主要我一個人管理,還有一個研二的學長幫忙看一個群,忙不過來,回答大家問題慢了,也不要見怪,想加群的加我微信:zs820553471。

希望多多支援,在公眾號上,要是說100%的心,我只能給大家50%,這50%無私分享學習,交流,剩下的50%,怪我,被利益和生活燻黑了。

六、結語

加我微信:zs820553471,備註:leetcode,加入專門的leetcode刷題交流群。
堅持 and 努力 : 終有所獲。

歡迎大家關注微信公眾號:極簡XksA,獲取Python/Java/前端等學習資源!

極簡XksA