力扣1003题
题目描述:检查替换后的词是否有效
给你一个字符串 s ,请你判断它是否 有效 。
字符串 s 有效 需要满足:假设开始有一个空字符串 t = “” ,你可以执行 任意次 下述操作将 t 转换为 s :将字符串 “abc” 插入到 t 中的任意位置。形式上,t 变为 tleft + “abc” + tright,其中 t == tleft + tright 。注意,tleft 和 tright 可能为 空 。
如果字符串 s 有效,则返回 true;否则,返回 false。来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路:
通过不断替换
"abc"
为""
,每替换一次就判断一次,为空则说明已经全部替换完毕,返回true;不能再替换并且不为孔说明需要返回false
class Solution {
public boolean isValid(String s) {
String replaceStr;
while (true){
replaceStr = s;
if (!replaceStr.isEmpty()){
replaceStr = replaceABC(replaceStr);
}
//走到这里,说明替换了一次,每替换一次,就判断一次
if (replaceStr.isEmpty()){
return true;
} else if (replaceStr.equals(s)) {
return false;
}
s = replaceStr;
}
}
public static String replaceABC(String s){
String abc = s.replace("abc", "");
return abc;
}
}
还有一种思路,是参考1419道题做的,建立一个记录a b c出现状态的数组,但是这个有bug,比如
String s1 = "aabbcc";
这种情况时就不行。有待改进!!!
class Solution1003 {
public boolean isValid(String s) {
int[] num = new int[3];
int length = s.length();
for(int i=0;i<length;i++){
//先判断第一个字母是不是'a'
if(s.charAt(0) != 'a'){
return false;
}
//
if(s.charAt(i) == 'a'){
if(num[2] != 0){
--num[2];
}
++num[0];
}else if(s.charAt(i) == 'b'){
//
if(num[0] == 0){
return false;
}
--num[0];
++num[1];
}else if(s.charAt(i) == 'c'){
//
if(num[1] == 0){
return false;
}
--num[1];
++num[2];
}
}
return (num[0] == 0 && num[1] == 0) ? true : false;
}
}
}
}
return (num[0] == 0 && num[1] == 0) ? true : false;
}
}