LeetCode演算法打卡 字串

2021-09-26 05:55:38 字數 3681 閱讀 9311

28. 實現 strstr()

實現 strstr() 函式。

給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 (從0開始)。如果不存在,則返回  -1。

/*基本思想:最簡單的就是對於needle來遍歷haystack ,i指向haystack,j指向needle

找第乙個字元相同的位置找到看後面的是否相同,不同則重新在之前找到的位置重找與needle[0]相同的位置,j從0開始,

相同就i,j同時++,繼續比較

*/class solution ;

int i,j;

for(i=0;i0;i--)

sum_v[0] += rest;

string result;

for(i=0;i58. 最後乙個單詞的長度

給定乙個僅包含大小寫字母和空格' '的字串,返回其最後乙個單詞的長度。

如果不存在最後乙個單詞,請返回 0 。

/*基本思路:找到最後乙個空格的位置(rfind),然後最後乙個單詞就是len-position-1

注意:1.當s為空或者只有乙個空格時,返回0

2.當最後乙個空格在單詞後面時,去除這個空格再呼叫該函式處理前面的字串

可以先去除末尾的空格,然後再用此思想處理

*/class solution */

int lengthoflastword(string s)

return num;

}};

67. 二進位制求和

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字10

/*基本思想:用異或模擬加法,然後用進製記錄,逐位計算即可

*/class solution

while(j>=0)

if(rest=='1')

res+=rest;

reverse(res.begin(),res.end());

return res;

}};

65. 有效數字

驗證給定的字串是否可以解釋為十進位制數字。

/*基本思想:一次遍歷,首先去掉首尾空格,然後每個符號開始判斷,首先判斷開始的+-符號,之後繼續判斷是數字或者是.並且統計數字和.的個數,數字個數不能為0,.的個數不能大於1個否則返回false

碰到不是數字或者. 如果是e,繼續判斷之後可以是+-,e後面必須要有數字所以然後判斷後面是否有數字,沒有返回false,遍歷到最後可以到最後一位返回true

*/class solution

// check the significand

if(s[i] == '+' || s[i] == '-') i++; // skip the sign if exist

int count=0, point=0;

for(; (s[i]<='9' && s[i]>='0') || s[i]=='.'; i++)

s[i] == '.' ? point++:count++;

if(point>1 || count<1) // 遍歷必須有數字,點的數量不能超過1個

return false;

// check the exponent if exist

if(s[i] == 'e') //e後面必須有數字

if(count<1)

return false;

}return i==s.size(); // 最後可以遍歷到最後一位返回true

}};

49. 字母異位詞分組

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。

/*基本思想:用map來統計每個字串出現的字元,然後比較一樣的放入乙個vector

*/class solution

else

continue;

}if(num>=5 && num<10)

else

continue;

}if(num>=10 && num<50)

else

continue;

}if(num>=50 && num<100)

else

continue;

}if(num>=100 && num<500)

else

continue;

}if(num>=500 && num<1000)

else

continue;

}else

}return res;

}};

6. z 字形變換

將乙個給定字串根據給定的行數,以從上往下、從左到右進行 z 字形排列。

/*

基本思想:分組假如有4行,則6個一組,統計一共有多少組,就能確定一共有多少列,然後將s分割成4,2,4,2的形式,然後進行讀取儲存

*/class solution

vs.push_back(curs);

}else

vs.push_back(curs);}}

for(i=0;i0)

//判斷第乙個不為空的符號

if(i==n || (str[i]!='+' && str[i]!='-' && str[i]<'0' && str[i]>'9'))

return 0;

if(str[i]=='+')

i++;

else if(str[i] == '-')

for(;i='0'&& str[i]<='9')

else

break;

} return res;

}};

30. 串聯所有單詞的子串

給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。

注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。

/*基本思想:用i遍歷s的每乙個位置,滿足條件作為結果

用j遍歷每乙個單詞進行判斷,words中的單詞個數為word_size

words中的每個單詞的長度為len

判斷條件: 首先記錄words中每個單詞出現的次數word_count,然後i遍歷s的時候,每次在s中擷取以i為開始len長度的字串,如果沒有在word_count**現,說明沒有匹配,找下乙個起始位置。如果在word_count**現,則儲存在word_cur中也是記錄出現次數。如果次數大於之前統計的次數,說明匹配不成功,否則,繼續尋找下乙個len長度的str重複(下乙個str的起始位置由i和j一起控制),直到找到word_size個單詞滿足即為結果。

*/class solution

else

break; //如果此單詞不存在於word_count裡,i位置不合法

}if(j==word_size)

res_index.push_back(i);//i==word_size,則i是合法位置之一

}return res_index;

}};

LeetCode 初級演算法 字串

1.用的是遞迴方法,要注意邊界處理 2.比如n 4,則n 3時的序列稱為n 4的pre序列,用pre序列來 下乙個序列,也就是要對pre序列進行遍歷,對pre遍歷的過程中,因為用的是index和index 1進行對比,要設定乙個溢位的處理。public string countandsay int ...

LeetCode演算法 字串相乘

題目 給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110...

LeetCode演算法打卡

475.供暖器 冬季已經來臨。你的任務是設計乙個有固定加熱半徑的供暖器向所有房屋供暖。現在,給出位於一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。所以,你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。說明 給出的房屋和供暖器的數目是非負數且不會超過 25000...