日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python學習教程:給定一個字符串,逐個翻轉(zhuǎn)字符串中的每個單詞

 千鋒Python學堂 2019-07-15

翻轉(zhuǎn)字符串里的單詞

Given an input string, reverse the string word by word.

示例 1:

輸入: "the sky is blue"
輸出: "blue is sky the"

示例 2:

輸入: " hello world! "
輸出: "world! hello"
解釋: 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。

示例 3:

輸入: "a good example"
輸出: "example good a"
解釋: 如果兩個單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個。

說明:

  • 無空格字符構(gòu)成一個單詞。

  • 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。

  • 如果兩個單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個。

進階:

請選用 C 語言的用戶嘗試使用 O(1) 額外空間復(fù)雜度的原地解法。

Note:

  • A word is defined as a sequence of non-space characters.

  • Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.

  • You need to reduce multiple spaces between two words to a single space in the reversed string.

Follow up:

For C programmers, try to solve it in-place in O(1) extra space.

解題思路:

Java 字符串不支持運算符重載,無法用原地解法。 我們將字符串轉(zhuǎn)為字符型數(shù)組并用兩個指針來解這道題。指針 i 作為原字符串轉(zhuǎn)為字符數(shù)組的索引,從右向左移。指針 j 作為新字符數(shù)組索引,從左向右賦值得到原數(shù)組 count 長度的字符。count記錄遇到的字母數(shù)量,每次遇到 空格 字符,新數(shù)組得到從該空格字符 向右 count 個字符并刷新count 計數(shù)。

Java:

class Solution {
public String reverseWords(String s) {
if (s.length()==0)return s;//如果為空直接返回
char strs[]=s.toCharArray(),ans[]=new char[s.length()];//字符串轉(zhuǎn)為char字符數(shù)組
int count=0,j=0;//全局變量j記錄新數(shù)組索引
for(int i=s.length()-1;i>=0;i--){指針i從右向左遍歷strs字符
if(strs[i]==' '){//判斷是否為空格字符
int k=i+1;
if(count>0){
while (--count>=0){//從字符i向右count個字符賦給新數(shù)組ans
ans[j++]=strs[k++];
}
ans[j++]=' ';
count=0;//count初始化為0
}
}else if(i==0){
for(;i<=count;i++)ans[j++]=strs[i];//左移到第一個字符時證明不是以空格開頭,則從0獲取count+1個個字符賦給ans
j+=1;
break;
}
else {
count++;//如果是字母,則count累加1
}
}
if(j<1)return "";//如果j依然是0,則原字符串全為空格,返回空字符串
String string=String.valueOf(ans,0,j-1);//char數(shù)組轉(zhuǎn)為字符串返回
return string;
}
}

為了考慮性能,轉(zhuǎn)成了多個判斷,所以有些繁瑣。最終運行:Your runtime beats 99.91 % of java submissions

Python3:

python完全可以實現(xiàn)Java的思路,不再復(fù)現(xiàn)。這里利用函數(shù)投機取巧:

split() ,它可以把傳入字符串剔除空格后返回 所有單詞的數(shù)組

join() ,它可以指定一個數(shù)組以特定字符為間隔,拼接成一個字符串

加上 [::-1] 反轉(zhuǎn)數(shù)組,一行代碼既可實現(xiàn)該題目要求

’ abc def ’原字符串

[‘a(chǎn)bc’ , ‘def’]剔除空格返回String型單詞數(shù)組

[‘def’ , ‘a(chǎn)bc’]切片反轉(zhuǎn)數(shù)組

‘def abc’拼接成字符串

class Solution:
def reverseWords(self, s: str) -> str:
return " ".join(s.split()[::-1]) # 剔除所有空格字符返回數(shù)組并反轉(zhuǎn),以空格為間隔把數(shù)組拼成字符串

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多