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++)相关推荐
- leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间
题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...
- LeetCode 10. Regular Expression Matching python特性、动态规划、递归
前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...
- leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...
- leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法
题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...
- leetcode:2680 Remove Duplicates from Sorted Array 删除数组中的重复元素
leetcode:26 对数组元素进行去重,使得原数组重复元素最多保留1个 限制: 我们不可以额外分配数组,必须保持空间复杂度为O(1) 这个并不难实现: class Solution(object) ...
- LeetCode简单题之二进制表示中质数个计算置位
题目 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数. 计算置位位数 就是二进制表示中 1 的个数. 例如, 21 ...
- LeetCode简单题之删除字符使字符串变好
题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答案总 ...
- LeetCode简单题之找出两数组的不同
题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中: answer[0] 是 nums1 中所有 不 存在于 nums2 中的 ...
- LeetCode中等题之区域和检索 - 数组可修改
题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...
- LeetCode简单题之整理字符串
题目 给你一个由大小写英文字母组成的字符串 s . 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: 若 s ...
最新文章
- webstorm2018修改运行web page端口号,并且让web在本地局域网内用IP访问
- Numpy关于数组的基本使用
- Java8读文件仅需一行代码
- 从比特币脚本引擎到以太坊虚拟机
- flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果 | 秒速技术
- 教育部:2006年江西高职(专科)院校名单
- Elasticsearch数据库
- 实时Web与WebSocket实践
- springmvc一个Controller类处理多个请求被遗弃的方式MultiActionController详解和新的方式
- emule学习与分析一 概述
- jquery中常见的标题内容之间的切换
- family album U.S.A 02
- TinyMCE 富文本编辑器 ━━ 自定义插件之弹窗基础设置(整理)
- vue+高德地图 点击地图获取经纬度和详细地址
- Json笔记-高德地铁数据分析
- 使用opencv-python读取多个(海康\大华)网络摄像头的视频流,解决实时读取延迟问题
- 计算机软件编程英语词汇集锦一
- python手机app开发_python可以开发app吗
- ONF和ON.Lab合并为一 加速推进SDN落地
- 计算机培训有假期吗,教师假期计算机培训心得体会
热门文章
- Java网络编程的简单应用 例程
- vue中使用v-on绑定事件中,获取$event.currentTarget,日志打印为null
- 洛谷 P2704 [NOI2001]炮兵阵地
- [NOI2007]货币兑换
- 蓝牙的发展史及版本演进
- linux mysql定时备份并压缩
- 温故知新(8)——备忘录模式
- matlab6432有什么区别,在同一台机器上使用Matlab 32和64位,如何在不同的地方存储设置?...
- input自适应_深度残差网络+自适应参数化ReLU(调参记录18)Cifar10~94.28%
- 安卓三维展示源码_手机(安卓)自动化脚本开发线上培训