專業(yè)的網(wǎng)站建設(shè)設(shè)計價格怎么做一個免費的網(wǎng)站
以下為個人解法,歡迎提供不同思路
1768. 交替合并字符串
題目:給你兩個字符串 word1 和 word2 。請你從 word1 開始,通過交替添加字母來合并字符串。如果一個字符串比另一個字符串長,就將多出來的字母追加到合并后字符串的末尾,返回 合并后的字符串 。
個人思路:我的思路是先比較字符串長度,如果相等則每次都添加二者字符串一個字符,如不相等,則找到最小的字符串長度n,然后每次都添加二者字符串一個字符直到長度n,最后把最長的字符串剩下的都添加到新字符串
class Solution
{
public:string mergeAlternately(string word1, string word2){string new_word;if (word1.size() == word2.size()){for (int i = 0; i < word1.size(); i++){new_word += word1[i];new_word += word2[i];}return new_word;}if (word1.size() > word2.size()){int i = 0;for (i = 0; i < word2.size(); i++){new_word += word1[i];new_word += word2[i];}for (; i < word1.size(); i++){new_word += word1[i];}return new_word;}if (word1.size() < word2.size()){int i = 0;for (i = 0; i < word1.size(); i++){new_word += word1[i];new_word += word2[i];}for (; i < word2.size(); i++){new_word += word2[i];}return new_word;}return new_word;}
};
389. 找不同
題目:給定兩個字符串 s 和 t ,它們只包含小寫字母。字符串 t 由字符串 s 隨機重排,然后在隨機位置添加一個字母。請找出在 t 中被添加的字母。
個人思路:我的思路是先通過sort排序,然后再遍歷字符串找出不同
class Solution {
public:char findTheDifference(string s, string t) {int i = 0;sort(s.begin(), s.end());sort(t.begin(), t.end());for (i = 0; i < s.length(); i++) {if (t[i] != s[i]) {return t[i];}}return t[i];}
};
學(xué)習(xí)到的新的思路:可以將二者字符串的ASCII碼值相減即可得到答案
class Solution {
public:char findTheDifference(string s, string t) {int as = 0, at = 0;for (char ch: s) {as += ch;}for (char ch: t) {at += ch;}return at - as;}
};作者:力扣官方題解
鏈接:https://leetcode.cn/problems/find-the-difference/solutions/525705/zhao-bu-tong-by-leetcode-solution-mtqf/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
28. 找出字符串中第一個匹配項的下標
題目:給你兩個字符串 haystack 和 needle ,請你在 haystack 字符串中找出 needle 字符串的第一個匹配項的下標(下標從 0 開始)。如果 needle 不是 haystack 的一部分,則返回 -1 。
個人思路:可以運用到string容器內(nèi)的find函數(shù)來查找下標。
class Solution {
public:int strStr(string haystack, string needle) {if (needle.empty()) {return 0;}size_t pos = haystack.find(needle);if (pos != string::npos) {return pos;}return -1;}
};
242. 有效的字母異位詞
題目:給定兩個字符串 s 和 t ,編寫一個函數(shù)來判斷 t 是否是 s 的字母異位詞。注意:若 s 和 t 中每個字符出現(xiàn)的次數(shù)都相同,則稱 s 和 t 互為字母異位詞。
個人思路:我的思路是先sort排序然后判斷兩個字符串是否相等,因為字母和次數(shù)都相等,所有我覺得用sort要好
class Solution {
public:bool isAnagram(string s, string t) {if (s.length() == t.length()) {int i = 0;sort(s.begin(), s.end());sort(t.begin(), t.end());if(s ==t)return true;} elsereturn false;return false; }
};
459. 重復(fù)的子字符串
題目:給定一個非空的字符串 s ,檢查是否可以通過由它的一個子串重復(fù)多次構(gòu)成。
個人思路:我的思路是遍歷所有可能的子串長度,對于每個長度,如果該長度能整除字符串長度,則提取對應(yīng)的子串并重復(fù)構(gòu)建一個與原字符串等長的新字符串,最后比較這兩個字符串是否相等
class Solution
{
public:bool repeatedSubstringPattern(string s){int n = s.length();if (n < 2){return false;}for (int len = 1; len <= n / 2; ++len){if (n % len == 0){string sub = s.substr(0, len);string repeated;for (int i = 0; i < n / len; ++i){repeated += sub;}if (repeated == s){return true;}}}return false;}
};
283. 移動零
題目:給定一個數(shù)組 nums,編寫一個函數(shù)將所有 0 移動到數(shù)組的末尾,同時保持非零元素的相對順序。請注意 ,必須在不復(fù)制數(shù)組的情況下原地對數(shù)組進行操作。
個人思路:我的思路是創(chuàng)建一個int類lastNonZeroFoundAt記錄不是0的位置,如果不為則加一,為0不動,最后再數(shù)組末尾填充lastNonZeroFoundAt個0
class Solution
{
public:void moveZeroes(vector<int>& nums) {int lastNonZeroFoundAt = 0;for (int i = 0; i < nums.size(); i++) {if (nums[i] != 0) {nums[lastNonZeroFoundAt++] = nums[i];}}for (int i = lastNonZeroFoundAt; i < nums.size(); i++) {nums[i] = 0;}}
};
66. 加一
題目:給定一個由 整數(shù) 組成的 非空 數(shù)組所表示的非負整數(shù),在該數(shù)的基礎(chǔ)上加一。最高位數(shù)字存放在數(shù)組的首位, 數(shù)組中每個元素只存儲單個數(shù)字。你可以假設(shè)除了整數(shù) 0 之外,這個整數(shù)不會以零開頭。
個人思路:從末尾開始遍歷數(shù)組,如果最低為不為9,則加一返回即可,如果最低位位9,則使最低位位0再次遍歷即可,當(dāng)然還得處理全為9情況,我們只要在開通添一個1即可
class Solution
{
public:vector<int> plusOne(vector<int>& digits) {int n = digits.size();for (int i = n - 1; i >= 0; i--){if (digits[i] < 9){digits[i]++;return digits;}digits[i] = 0;}digits.insert(digits.begin(), 1);return digits;}
};
1822. 數(shù)組元素積的符號
題目:已知函數(shù) signFunc(x) 將會根據(jù) x 的正負返回特定值:如果 x 是正數(shù),返回 1 如果 x 是負數(shù),返回 -1 。如果 x 是等于 0 ,返回 0 。給你一個整數(shù)數(shù)組 nums 。令 product 為數(shù)組 nums 中所有元素值的乘積。返回 signFunc(product) 。
個人思路:為了防止整數(shù)越界,所以當(dāng)數(shù)組元素如果大于0,則為1,小于0則為-1,等于0則為0,然后用sum乘等于數(shù)組即可得出答案
class Solution
{
public:int arraySign(vector<int>& nums) {int n = nums.size();int sum = 1;for (int i = 0; i < n; i++){if (nums[i] > 0)nums[i] = 1;else if (nums[i] == 0)nums[i] = 0;elsenums[i] = -1;sum *= nums[i];}if (sum > 0)return 1;else if (sum == 0)return 0;elsereturn -1;}
};
1502. 判斷能否形成等差數(shù)列
題目:給你一個數(shù)字數(shù)組 arr 。如果一個數(shù)列中,任意相鄰兩項的差總等于同一個常數(shù),那么這個數(shù)列就稱為 等差數(shù)列 。如果可以重新排列數(shù)組形成等差數(shù)列,請返回 true ;否則,返回 false
class Solution
{
public:bool canMakeArithmeticProgression(vector<int>& arr) {sort(arr.begin(), arr.end());int n = arr[1] - arr[0];for (int i = arr.size() - 1; i > 0; i--){if (arr[i] - n != arr[i - 1]){return false;}}return true;}
};