首先看一下题
描述
判断短字符串S中的所有字符是否在长字符串T中全部出现。
请注意本题有多组样例输入。
数据范围: 1≤len(S),len(T)≤200
进阶:时间复杂度: O(n) ,空间复杂度: O(n)
输入描述:
输入两个字符串。第一个为短字符串,第二个为长字符串。两个字符串均由小写字母组成。
输出描述:
如果短字符串的所有字符均在长字符串中出现过,则输出字符串"true"。否则输出字符串"false"。
示例1
输入:
bc abc输出:
true说明:
其中abc含有bc,输出"true"
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.判断短字符串S中的所有字符是否在长字符串T中全部出现。
2.请注意本题有多组样例输入。
3.数据范围:len(S)和len(T)大于等于1,小于等于200
4.进阶:时间复杂度:O(n),空间复杂度:O(n)
5.输入描述:输入两个字符串。第一个为短字符串,第二个为长字符串。两个字符串均由小写字母组成。
6.输出描述:如果短字符串的所有字符均在长字符串中出现过,则输出字符串“true”。否则输出字符串“false”。
二、解题思路
1.首先我们引入标准输入输出库、字符串处理库
#include <stdio.h>
#include <string.h>
#define MAXLEN 200
2.然后我们开始主程序
int main() {
3.我们定义两个字符串
char S[MAXLEN], T[MAXLEN];
while(scanf("%s\n%s", S, T) != EOF) {
int lenS = strlen(S);
int lenT = strlen(T);
int flag = 0;
for(int i = 0; i < lenT; i++) {
if(T[i] == S[0]) {
if(strcmp(T + i,S, LenS) == 0) {
flag = 1;
break;
}
}
}
if(flag == 1) printf("true\n");
else printf("false\n");
}
这里注意不是按顺序出现的也可以
我们定义一个数组,
bool arrS[26] = {0}
for(int i = 0; i < lenS; i++) {
arrS[S[i] - 'a'] = true;
}
for(int i = 0; i < lenT; i++ ){
arrS[T[i] - 'a'] = false;
}
int flag = 0;
for(int i = 0; i < 26; i++) {
if(arrS[i] == true) {
flag = 1;
break;
}
}
if(flag == 1) printf("false\n");
else printf("true\n");
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define MAXLEN 200
int main() {
char S[MAXLEN], T[MAXLEN];
while (scanf("%s\n%s", S, T) != EOF) {
int lenS = strlen(S);
int lenT = strlen(T);
int flag = 1;
bool arrS[26] = {false};
for(int i = 0; i < lenS; i++) {
arrS[S[i] - 'a'] = true;
}
for(int i = 0; i < lenT; i++) {
arrS[T[i] - 'a'] = false;
}
for(int i = 0; i < 26; i++) {
if(arrS[i] == true) flag = 0;
}
if (flag == 1) printf("true\n");
else printf("false\n");
}
}
标签:false,int,flag,华为,arrS,字符串,机试,true,HJ81
From: https://blog.csdn.net/bingw0114/article/details/143578897