给定有效字符串 “abc”。

对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + “abc” + Y 也同样是有效的。

例如,如果 S = “abc”,则有效字符串的示例是:“abc”,“aabcbc”,“abcabc”,“abcabcababcc”。无效字符串的示例是:“abccba”,“ab”,“cababc”,“bac”。

如果给定字符串 S 有效,则返回 true;否则,返回 false。
示例 1:

输入:"aabcbc"
输出:true
解释:
从有效字符串 "abc" 开始。
然后我们可以在 "a" 和 "bc" 之间插入另一个 "abc",产生 "a" + "abc" + "bc",即 "aabcbc"。

示例 2:

输入:"abcabcababcc"
输出:true
解释:
"abcabcabc" 是有效的,它可以视作在原串后连续插入 "abc"。
然后我们可以在最后一个字母之前插入 "abc",产生 "abcabcab" + "abc" + "c",即 "abcabcababcc"。

示例 3:

输入:"abccba"
输出:false

示例 4:

输入:"cababc"
输出:false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-if-word-is-valid-after-substitutions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

个人思路:虽然说是用栈,但是俺懒= =,顺手直接用了字符串去判断,具体思路就是查第i,i+1,i+2是否是“abc”然后直接删掉。

class Solution {public:bool isValid(string s) {while(1){if(s.length() == 0) return 1;else if(s == "abc") return 1;else if(s.length()<=3)  return 0;for(int i =0 ;i<s.length() - 2;i++){if(s[i] == 'a' && s[i+1] == 'b' && s[i+2] == 'c'){for(int j = i;j<s.length() - 2;j++){s[j] = s[j+3];}s.pop_back();s.pop_back();s.pop_back();}}}}
};

虽然写的很快乐,但是我忘了个条件,字符串大于3的而且字符串不变的时候,俺没考虑。

class Solution {public:bool isValid(string s) {string a;while(1){a=s;if(s.length() == 0) return 1;else if(s == "abc") return 1;else if(s.length()<=3)  return 0;for(int i =0 ;i<s.length() - 2;i++){if(s[i] == 'a' && s[i+1] == 'b' && s[i+2] == 'c'){for(int j = i;j<s.length() - 2;j++){s[j] = s[j+3];}s.pop_back();s.pop_back();s.pop_back();}}if(a==s) return 0;} }
};

改了一下下= =自己写的这个方法果然懒

C++算法学习(力扣:1003. 检查替换后的词是否有效)相关推荐

  1. 1003. 检查替换后的词是否有效

    2020-05-15 1.题目描述 检查替换后的词是否有效 2.题解 使用栈即可,如果是 a和b直接入栈,如果是c还要判断能不能有abc,最后再判断栈是否为空即可. 3.代码 class Soluti ...

  2. LeetCode 1003. 检查替换后的词是否有效(栈)

    1. 题目 给定有效字符串 "abc". 对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V.(X 或 Y 可以为空. ...

  3. 2022-3-28 Leetcode 1003.检查替换后的词是否有效

    bool isValid(string S) {stack<char> st;for (auto &ch : S) {if (st.empty()){st.push(ch);}el ...

  4. 20200315:检查替换后的词是否有效(leetcode1003)

    检查替换后的词是否有效 题目 思路与算法 代码实现 复杂度分析 题目 题意稍微费解了一点,但是看下面四个例子 思路与算法 看完上面四个例子,大致懂了,这题是个消消乐,而且题目给的这个字符串必定只有'a ...

  5. C++算法学习(力扣:面试题 04.04 检查平衡性)

    力扣:面试题 04.04 检查平衡性 实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1. 示例 1: 给定二叉树 [3,9,20,null, ...

  6. C++算法学习(力扣:1091. 二进制矩阵中的最短路径)

    在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, -, C_k 组成: 相邻单 ...

  7. C++算法学习(力扣:328. 奇偶链表)

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  8. C++算法学习(力扣:面试题 16.04. 井字游戏)

    设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...

  9. C++算法学习(力扣:201. 数字范围按位与)

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...

最新文章

  1. GPU---并行计算利器
  2. (译)删除未使用的前端代码
  3. 几款常用的编辑器介绍,给刚入门学Web前端的人
  4. java抽象继承-模板方法
  5. Linux Shell常用技巧(九)
  6. Jakarta EE贡献–入门
  7. 腾讯视频客户端如何设置快进速度
  8. 使用POI导出Excel公用类方法 v1.1
  9. WebRTC服务器——Licode 环境搭建
  10. 离散数学 习题篇 —— 最小生成树
  11. Access数据库对象包括哪六个?Access与 Excel 最重要的区别是什么?
  12. 一键安装包php.ini,laravel 在windows中使用一键安装包步骤
  13. 安全报告处理 HCL AppScan Standard
  14. 程序员常用网站加速办法汇总
  15. 北理计算机实验18,18北理应用统计经验贴
  16. 【Spring】入门
  17. Blood Cousins (dsu on tree + 求第k级祖先)
  18. Kettle连接数据库(DB连接)
  19. auto.js之界面ui
  20. 走航式海洋多参数剖面测量系统(MVP)验收记录

热门文章

  1. windows程序静默安装
  2. LeetCode 73. Set Matrix Zeroes
  3. 程序员面试金典——9.9n皇后问题
  4. 基于map函数生成星战片头动画
  5. 森林结点数,边数与树个数的关系
  6. anaconda下安装库出现UnsatisfiableError问题的解决办法
  7. ubuntu Mendeley Desktop 安装
  8. 调试错误:ValueError: Protocol message Feature has no quot;featurequot; field.
  9. 并查集及其简单应用:优化kruskal算法
  10. Select的onchange事件