代码参考——————————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++)相关推荐

  1. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间

    题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...

  2. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  3. leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法

    题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...

  4. leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法

    题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...

  5. leetcode:2680 Remove Duplicates from Sorted Array 删除数组中的重复元素

    leetcode:26 对数组元素进行去重,使得原数组重复元素最多保留1个 限制: 我们不可以额外分配数组,必须保持空间复杂度为O(1) 这个并不难实现: class Solution(object) ...

  6. LeetCode简单题之二进制表示中质数个计算置位

    题目 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数. 计算置位位数 就是二进制表示中 1 的个数. 例如, 21 ...

  7. LeetCode简单题之删除字符使字符串变好

    题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答案总 ...

  8. LeetCode简单题之找出两数组的不同

    题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中: answer[0] 是 nums1 中所有 不 存在于 nums2 中的 ...

  9. LeetCode中等题之区域和检索 - 数组可修改

    题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...

  10. LeetCode简单题之整理字符串

    题目 给你一个由大小写英文字母组成的字符串 s . 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: 若 s ...

最新文章

  1. webstorm2018修改运行web page端口号,并且让web在本地局域网内用IP访问
  2. Numpy关于数组的基本使用
  3. Java8读文件仅需一行代码
  4. 从比特币脚本引擎到以太坊虚拟机
  5. flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果 | 秒速技术
  6. 教育部:2006年江西高职(专科)院校名单
  7. Elasticsearch数据库
  8. 实时Web与WebSocket实践
  9. springmvc一个Controller类处理多个请求被遗弃的方式MultiActionController详解和新的方式
  10. emule学习与分析一 概述
  11. jquery中常见的标题内容之间的切换
  12. family album U.S.A 02
  13. TinyMCE 富文本编辑器 ━━ 自定义插件之弹窗基础设置(整理)
  14. vue+高德地图 点击地图获取经纬度和详细地址
  15. Json笔记-高德地铁数据分析
  16. 使用opencv-python读取多个(海康\大华)网络摄像头的视频流,解决实时读取延迟问题
  17. 计算机软件编程英语词汇集锦一
  18. python手机app开发_python可以开发app吗
  19. ONF和ON.Lab合并为一 加速推进SDN落地
  20. 计算机培训有假期吗,教师假期计算机培训心得体会

热门文章

  1. Java网络编程的简单应用 例程
  2. vue中使用v-on绑定事件中,获取$event.currentTarget,日志打印为null
  3. 洛谷 P2704 [NOI2001]炮兵阵地
  4. [NOI2007]货币兑换
  5. 蓝牙的发展史及版本演进
  6. linux mysql定时备份并压缩
  7. 温故知新(8)——备忘录模式
  8. matlab6432有什么区别,在同一台机器上使用Matlab 32和64位,如何在不同的地方存储设置?...
  9. input自适应_深度残差网络+自适应参数化ReLU(调参记录18)Cifar10~94.28%
  10. 安卓三维展示源码_手机(安卓)自动化脚本开发线上培训