简单
相关标签
相关企业
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s ****中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", s = "dog cat cat dog"
输出: true
示例 2:
输入: pattern = "abba", s = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", s = "dog cat cat dog"
输出: false
提示:
1 <= pattern.length <= 300pattern只包含小写英文字母1 <= s.length <= 3000s只包含小写英文字母和' 's不包含 任何前导或尾随对空格s中每个单词都被 单个空格 分隔
题解:
bug:对于字符串的处理存在很大问题。我设置了指针指向字符串,赋值时候并不是把指针所指的内容移动到另一个指针所指的内存区域,而是把另一个指针的值改成这个指针的值,两个指针指向同一块内存空间,这是不对的。字符串赋值应该采用strcpy(newpoint, oldpoint)这样的形式。
牢记字符串赋值,不可以直接等于,应该使用strcpy。
修正后通过
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i = 0;
int nums[26] = {0};
char pattern[300] = {'\0'};
scanf("%s", pattern);
char** hash = (char**)malloc(sizeof(char*) * 26);
char temp[3000] = {'\0'};
for (i = 0;i <= 25;i ++)
{
hash[i] = (char*)malloc(sizeof(char) * 3000);//虽然很浪费,但是不分配存储空间的话无法运行。
}
i = 0;
while (pattern[i] != '\0')
{
if (nums[pattern[i] - 'a'] == 0)
{
nums[pattern[i] - 'a'] = 1;
scanf("%s", temp);
strcpy(hash[pattern[i] - 'a'], temp);//*********字符串赋值一定要用strcpy*************
}
else
{
scanf("%s", temp);
if (strcmp(temp, hash[pattern[i] - 'a']) != 0)
{
printf("false");
return 0;
}
}
i ++;
}
printf("true");
return 0;
}