今日刷题 三道

bool isValid(char * s){
int a= strlen(s);
if(a%2==1) return false;
int i,j,k;
j=1;

for(i=a/2;i<a;i++){
if(s[i]=='('&&s[a-1-i]!=')') j=0 ;
if (s[i]=='['&&s[a-1-i]!=']') j=0;
if (s[i]=='{'&&s[a-1-i]!='}') j=0 ;

}
return j;

}

此处我犯了两个错误 ()【】不必中间匹配,二来我让中间相等,但是一个左括号一个又括号,只能,慢慢来,用堆栈,设计一个数组,如果栈顶等于栈底,就都排出,如果不想等失败

#define Maxsize 10000
bool isValid(char * s){
char stack[Maxsize];
int top=-1;
int flag = 1;
int len = strlen(s);
for (int i=0;i<len&&flag;i++){
switch (s[i]){
case '(':
stack[++top] = s[i];
break;
case '{':
stack[++top] = s[i];
break;
case '[':
stack[++top] = s[i];
break;
case ')':
if (top != -1 &&stack[top] == '('){
top--;
}
else flag=0;
break;
case '}':
if (top != -1 &&stack[top] == '{'){
top--;
}
else flag=0;
break;
case ']':
if (top != -1 &&stack[top] == '['){
top--;
}
else flag=0;
break;
}
}
if (flag&&top == -1){
return true;
}
else return false;
先把左括号入栈,又括号匹配

实现 strStr() 函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回  -1 

模式匹配算法,找串长,挨个匹配
int n = strlen(haystack), m = strlen(needle);
for (int i = 0; i + m <= n; i++) {
bool flag = true;
for (int j = 0; j < m; j++) {
if (haystack[i + j] != needle[j]) {
flag = false;
break;
}
}
if (flag) {
return i;
}
}
return -1;

break函数作用在哪 break就是要跳出所有循环。用于判断一个东西不是,不是就直接跳出来,干净利落

posted @ 2021-09-08 22:37  唱月  阅读(22)  评论(0编辑  收藏  举报