Leecode刷题C语言之字符串及其反转中是否存在同一子字符串
执行结果:通过
执行用时和内存消耗如下:

 
 
 
 
bool isSubstringPresent(char* s) {int i,len=strlen(s),end;for(i=0;i<len-1;i++){if(s[i]==s[i+1])    return true;for(end=len-1;end>1;end--){if(s[i]==s[end]&&s[i+1]==s[end-1])  return true;}}return false;
}
解题思路:
这段代码的目的是检查一个字符串 s 中是否包含 "ABAB" 类型的子串(即两个相同的字符紧接着另外两个相同的字符)。下面是详细的解题思路:
- 初始化变量: - i:用于遍历字符串- s的每个字符。
- len:存储字符串- s的长度。
- end:用于从字符串- s的末尾向前遍历,以检查是否存在与- s[i]和- s[i+1]相同的连续字符对。
 
- 遍历字符串: - 使用外层循环 (for(i=0; i<len-1; i++)) 遍历字符串s的每个字符,直到倒数第二个字符。这样做是因为我们需要检查当前字符s[i]和其后一个字符s[i+1]是否相同,以及是否存在与之相同的字符对在字符串的其他位置。
 
- 使用外层循环 (
- 检查相邻字符是否相同: - 在外层循环中,首先检查当前字符 s[i]和其后一个字符s[i+1]是否相同。如果相同,意味着已经找到了 "AA" 这样的子串,只需要在字符串的其他部分找到另一个 "AA" 子串即可确认存在 "ABAB" 类型的子串(这里假设s[i]和s[i+1]代表 "AA",而后续检查会验证是否存在另一个 "AA")。在这种情况下,直接返回true。
 
- 在外层循环中,首先检查当前字符 
- 在字符串的其余部分查找相同的字符对: - 如果当前字符 s[i]和其后一个字符s[i+1]不相同,则进入内层循环 (for(end=len-1; end>i+1; end--)) 从字符串的末尾向前遍历(注意,end的初始值是len-1,且每次循环end都递减,但循环条件是end>i+1,确保不会与外层循环中的i和i+1位置重叠)。
- 在内层循环中,检查是否存在 s[i] == s[end]且s[i+1] == s[end-1]的情况。如果找到这样的字符对,意味着在字符串s中找到了 "ABAB" 类型的子串(其中s[i]和s[i+1]可以看作 "AB" 的一部分,而s[end]和s[end-1]是另一部分),此时返回true。
 
- 如果当前字符 
- 未找到符合条件的子串: - 如果外层循环和内层循环都未能找到符合条件的子串,则函数最终返回 false,表示字符串s中不存在 "ABAB" 类型的子串。
 
- 如果外层循环和内层循环都未能找到符合条件的子串,则函数最终返回 
总结:
 这段代码通过两层循环遍历字符串 s,检查是否存在由两个相同字符组成的连续对,并确认这样的对是否至少在字符串中出现两次(可以是重叠的,也可以是不重叠的),从而判断字符串 s 中是否包含 "ABAB" 类型的子串。
