日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

LEETCODE- The First Day (C++)

發布時間:2024/8/26 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LEETCODE- The First Day (C++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼參考——————————https://soulmachine.gitbooks.io/algorithm-essentials/content/cpp/

Valid Palindrome (字符串對稱)

功能測試:字符串是否是對稱的

邊界測試:輸入全是標點符號

負面測試:輸入不是字符串

分析:a. 字母大小寫轉換(都變為小寫) b.首尾夾逼比較 c.遇到標點符號跳過

1 class Solution { 2 public: 3 bool isPalindrome(string s) { 4 transform(s.begin(),s.end(),s.begin(),::tolower);//字母轉小寫 5 auto left = s.begin(), right = prev(s.end()); //s.end->'\0' 6 while(left < right){ 7 //::isalnum判斷字符變量是否為字母或數字 8 if(!::isalnum(*left)) ++left; 9 else if (!::isalnum(*right)) --right; 10 else if (*left != *right) return false; 11 else {left++; right--;} 12 } 13 return true; 14 } 15 };

Implement strStr() (needle是否是haystack的一部分,其中它們都是字符串)

功能測試:needle是否是haystack的一部分

負面測試:輸入為空

分析:暴力解法時間復雜度O(m*n)

1 class Solution { 2 public: 3 int strStr(const string& haystack,const string& needle) { 4 //不考慮輸入大小寫問題 5 if(needle.empty()) return 0; 6 7 const int N = haystack.size() - needle.size() + 1; 8 for(int pointer = 0; pointer < N; pointer++){ 9 int temph = pointer; 10 int tempn = 0; 11 while(temph < haystack.size() && tempn < needle.size() && haystack[temph] == needle[tempn]){ 12 temph++; 13 tempn++; 14 } 15 if(tempn == needle.size()) return pointer; 16 } 17 return -1; 18 } 19 };

String to Integer(atoi)?(將字符串轉換為數字)

功能測試:是否轉換成功并返回數字?字符串除空格外第一個字符必須為數字或者是正負號

邊界測試:超出int范圍使用INT_MIN或INT_MAX替代

負面測試:輸入為空? ? ? ?

int?num =?0;
     
int sign = 1;const int n = str.length();if (n==0) return 0;int i = 0;while(str[i]==' '&& i<n ) i++;if(str[i] == '+'){i++;}else if (str[i] == '-'){sign = -1;i++;}for(;i < n;i ++){if(str[i] < '0' || str[i] > '9') break;if(num > INT_MAX/10 || (num == INT_MAX / 10 &&(str[i]-'0') > INT_MAX %10)){return sign == -1? INT_MIN: INT_MAX;}num = num * 10 + str[i]-'0'; //輸入為2147483640時會提示runtime error:
//pointer index expression with base 0x000000000000 overflowed to 0xffffffffffffffff (basic_string.h)}
return num*sign;

Add Binary?

功能測試:二進制加法

邊界測試:考慮進位

負面測試:輸入都不為空(不用考慮)

1 class Solution { 2 public: 3 string addBinary(string a,string b) { 4 string result; 5 int i = a.length() - 1; 6 int j = b.length() - 1; 7 int carry = 0; 8 9 while(i >= 0 || j>=0 || carry > 0){ 10 int valueA = i < 0? 0 : a[i--] - '0'; 11 int valueB = j < 0? 0 : b[j--] - '0'; 12 int sum = valueA + valueB + carry; 13 result.insert(result.begin(),(sum%2) +'0'); //頭插入 14 carry = sum / 2; 15 } 16 return result; 17 } 18 };

Longest Palindromic Substring

功能測試:最長回文子串

邊界測試:兩個相同并列

負面測試:輸入都不為空(不用考慮)

?

1 // Longest Palindromic Substring 2 // 動規,時間復雜度O(n^2),空間復雜度O(n^2) 3 class Solution { 4 public: 5 string longestPalindrome(const string& s) { 6 const int n = s.size(); 7 bool f[n][n]; 8 fill_n(&f[0][0], n * n, false); 9 // 用 vector 會超時 10 //vector > f(n, vector(n, false)); 11 size_t max_len = 1, start = 0; // 最長回文子串的長度,起點 12 13 for (size_t i = 0; i < s.size(); i++) { 14 f[i][i] = true; 15 for (size_t j = 0; j < i; j++) { // [j, i] j->start i->end 16 f[j][i] = (s[j] == s[i] && (i - j < 2 || f[j + 1][i - 1])); 17 if (f[j][i] && max_len < (i - j + 1)) { 18 max_len = i - j + 1; 19 start = j; 20 } 21 } 22 } 23 return s.substr(start, max_len); 24 } 25 };

?

轉載于:https://www.cnblogs.com/Daniellovejedidah/p/10806632.html

總結

以上是生活随笔為你收集整理的LEETCODE- The First Day (C++)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。