1. 程式人生 > 其它 >C++ 求字串中最後一個單詞的長度 [LeetCode 58]

C++ 求字串中最後一個單詞的長度 [LeetCode 58]

第一次成功提交的思路是把字串翻轉後,用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,大大減少

蕩塵滌汙,重整河山,便在今日