您的位置:首页 > 其它

变换循环变量,降低复杂度

2018-02-10 07:57 218 查看
在一些问题中,如果适当选择循环变量,将会降低程序的复杂度,例如判断子串的问题:

判断字符串 s 是不是 t的子串,有两种方案

方案一

思路:对s中的元素遍历,根据贪心的思想,搜索t中第一个该元素,若不存在,则说明s不是t的子串。注意,s中的元素在t中的相对位置必须保持不变,所以每一次搜索时,应该从上一次搜索到的位置处搜索。

实现:搜索可以用 cstring 中的strchr函数。

复杂度应该是O(n2)O(n2)

int is_sub(char *s,char *t){
int len=strlen(s);
char *p=t;
for
b22e
(int i=0;i<len;++i){
char *q=strchr(p,s[i]);
if(q==NULL) {
return 0;
}
else{
q[0]=' ';
p=q;
}
}
return 1;
}


方案二

思路:对t中元素遍历,并与s中当前待比较元素比较。

实现:用ii代表s中当前待比较元素的下标。

复杂度是O(n)O(n);

int is_sub(char *s,char *t){
int lent=strlen(t),lens=strlen(s);
int i=0;
for(int j=0;j<lent;++j){
if(t[j]==s[i]) ++i;
if(i==lens) return 1;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: