C++ 求字串中最後一個單詞的長度 [LeetCode 58]
阿新 • • 發佈:2021-09-13
第一次成功提交的思路是把字串翻轉後,用find和subStr函式去一步步分割,存到vector裡,最後vector裡得到的第一個字串就是:
#include<iostream> #include<algorithm> #include<map> #include<string> #include<vector> using namespace std; std::vector<std::string> splitWithStl(const std::string& str, const std::string& pattern) { std::vector<std::string> resVec; if ("" == str) { return resVec; } //方便擷取最後一段資料 std::string strs = str + pattern; size_t pos = strs.find(pattern); size_t size = strs.size(); while (pos != std::string::npos)//不斷根據“ ”分割字串 { std::string x = strs.substr(0, pos);if(x!="") resVec.push_back(x); //將非空的字串存到vector裡 strs = strs.substr(pos + 1, size);//分割完第一個後繼續操作 pos = strs.find(pattern);//不斷重複 } return resVec; } int lengthOfLastWord(string s) { reverse(s.begin(), s.end()); vector<string> vec = splitWithStl(s, " ");return vec.front().size(); } int main() { string s = " fly me to the moon "; cout << lengthOfLastWord(s) << endl; }
結果就是記憶體佔用很大,17M,原因很簡單,新建的vector裡把分割出的單詞都存進去了,到這裡我覺得我想的太複雜了,應該有更簡單的方法。
從字元層面去做,既然是找最後一個單詞,那麼可以直接從從後往前遍歷這個字串,只需要找出第一次出現不是空格“ ”的位置,然後從此位置計數,直到出現空格“ ”或者到字串的盡頭即可。
想的太多反而忘了最基本,也是最簡單的做法,程式碼如下:
int lengthOfLastWord(string s) { int len=0; for(int i=s.size()-1;i>=0;--i) { if(s[i]!=' ') //找到第一個不是“ ”的位置,開始計數 len++; else if(len!=0)// 如果有“ ”出現,就說明最後一個單詞找完了,返回 return len; } return len; //最後一個單詞的前邊沒有空格,直接返回 }
記憶體佔用只有6.4M,大大減少
蕩塵滌汙,重整河山,便在今日