题解 | 华为HJ81#字符串字符匹配#
字符串字符匹配
https://www.nowcoder.com/practice/22fdeb9610ef426f9505e3ab60164c93
描述
判断短字符串S中的所有字符是否在长字符串T中全部出现。
请注意本题有多组样例输入。
数据范围:1≤len(S),len(T)≤200
进阶:时间复杂度:O(n) ,空间复杂度:O(n)
输入描述:
输入两个字符串。第一个为短字符串,第二个为长字符串。两个字符串均由小写字母组成。
输出描述:
如果短字符串的所有字符均在长字符串中出现过,则输出字符串"true"。否则输出字符串"false"。
示例1
输入:
bc abc
输出:
true
说明:
其中abc含有bc,输出"true"
#include <stdio.h>
#include <string.h>
//以下是Senky的代码:
//算法:循环遍历每一个字符
int main() {
int m = 0;
int n = 0;
char s[200];//短字符串
char t[200];//长字符串
scanf("%s", s);//输入短字符串
scanf("%s", t);//输入长字符串
int flag = 0;//在s中一次寻找字符的结果,初始化为0
int i = 0;//指向短字符串的指针
int j = 0;//指向长字符串的指针
while (i < strlen(s)) {//逐个检查s内的字符串
flag = 0; //每次进入flag为0
for (j = 0; j < strlen(t); j++) {
if (s[i] == t[j]) {//相等则s中的字符存在t中
i++;//寻找s中的下一个字符
flag = 1; //s中的字符在t中找到了,flag为1
break;//本字符找到了就跳出for循环
}
}
if (0 == flag) {
break;//如果本次没找到,则跳出while循环说明不符合
}
}
if (flag) {
printf("true");
} else {
printf("false");
}
return 0;//编辑于2022/10/09
}
总结:
①该算法还不是最优的算法,时间复杂度为O(n²),日后有待完善;
②现在写代码,每一步注释都能够写得很清楚,个人看自己的代码逻辑还是很清晰的,可读性比较强,进步很明显;
③当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;
华为-HJ 文章被收录于专栏
机试的题解
