28. 實現 strstr()
實現 strstr() 函式。
給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 (從0開始)。如果不存在,則返回 -1。
67. 二進位制求和/*基本思想:最簡單的就是對於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;
}};
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字1
和0
。
/*基本思想:用異或模擬加法,然後用進製記錄,逐位計算即可
*/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...