C++算法学习(力扣:1003. 检查替换后的词是否有效)
给定有效字符串 “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. 检查替换后的词是否有效)相关推荐
- 1003. 检查替换后的词是否有效
2020-05-15 1.题目描述 检查替换后的词是否有效 2.题解 使用栈即可,如果是 a和b直接入栈,如果是c还要判断能不能有abc,最后再判断栈是否为空即可. 3.代码 class Soluti ...
- LeetCode 1003. 检查替换后的词是否有效(栈)
1. 题目 给定有效字符串 "abc". 对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V.(X 或 Y 可以为空. ...
- 2022-3-28 Leetcode 1003.检查替换后的词是否有效
bool isValid(string S) {stack<char> st;for (auto &ch : S) {if (st.empty()){st.push(ch);}el ...
- 20200315:检查替换后的词是否有效(leetcode1003)
检查替换后的词是否有效 题目 思路与算法 代码实现 复杂度分析 题目 题意稍微费解了一点,但是看下面四个例子 思路与算法 看完上面四个例子,大致懂了,这题是个消消乐,而且题目给的这个字符串必定只有'a ...
- C++算法学习(力扣:面试题 04.04 检查平衡性)
力扣:面试题 04.04 检查平衡性 实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1. 示例 1: 给定二叉树 [3,9,20,null, ...
- C++算法学习(力扣:1091. 二进制矩阵中的最短路径)
在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, -, C_k 组成: 相邻单 ...
- C++算法学习(力扣:328. 奇偶链表)
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...
- C++算法学习(力扣:面试题 16.04. 井字游戏)
设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...
- C++算法学习(力扣:201. 数字范围按位与)
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...
最新文章
- GPU---并行计算利器
- (译)删除未使用的前端代码
- 几款常用的编辑器介绍,给刚入门学Web前端的人
- java抽象继承-模板方法
- Linux Shell常用技巧(九)
- Jakarta EE贡献–入门
- 腾讯视频客户端如何设置快进速度
- 使用POI导出Excel公用类方法 v1.1
- WebRTC服务器——Licode 环境搭建
- 离散数学 习题篇 —— 最小生成树
- Access数据库对象包括哪六个?Access与 Excel 最重要的区别是什么?
- 一键安装包php.ini,laravel 在windows中使用一键安装包步骤
- 安全报告处理 HCL AppScan Standard
- 程序员常用网站加速办法汇总
- 北理计算机实验18,18北理应用统计经验贴
- 【Spring】入门
- Blood Cousins (dsu on tree + 求第k级祖先)
- Kettle连接数据库(DB连接)
- auto.js之界面ui
- 走航式海洋多参数剖面测量系统(MVP)验收记录
热门文章
- windows程序静默安装
- LeetCode 73. Set Matrix Zeroes
- 程序员面试金典——9.9n皇后问题
- 基于map函数生成星战片头动画
- 森林结点数,边数与树个数的关系
- anaconda下安装库出现UnsatisfiableError问题的解决办法
- ubuntu Mendeley Desktop 安装
- 调试错误:ValueError: Protocol message Feature has no quot;featurequot; field.
- 并查集及其简单应用:优化kruskal算法
- Select的onchange事件