题目描述
分析
该题是在leetCode“二分搜索”类下搜到的一题难度为medium的题。从题目的意思来看,其实就是判断子串的字符顺序是否在主串中出现过,若出现过,就返回true。就题目的意思来说,那我们最多遍历一次主串来挨个搜寻出子串的字符即可得出结果,很简单明了的一件事儿。之所以说是medium,是从若用运用二分搜索的思想来解该题的角度说的吧,而我到在写下这篇博客为止,还未能想到如何应用二分搜索来弄。
代码实现
bool isSubsequence(char* s, char* t) {
int slen=strlen(s);
int tlen=strlen(t);
int j=0;
for(int i=0;i<tlen;i++){
if(s[j]==t[i]){
j++;
if(j==slen)
break;
}
}
if(j==slen)
return true;
else
return false;
}
- 附
无意中看到了一个对上述方法进行实现的简洁代码(除不含break的功能外),如下
bool isSubsequence(char* s, char* t) {
while (*t)
s += *s == *t++;
return !*s;
}
感想:
好简洁,利用了判断语句的结果true、false会在计算中自动转化为1、0值,以及char类型的存储空间为1个字节的性质,当然还有字符串以‘\0’结束,作为判断时会转成false的性质,三句代码就搞定了,膜!