290. 单词规律(字符串赋值不能直接=,应用strcpy)

21 阅读2分钟

290. 单词规律

简单

相关标签

premium lock icon相关企业

给定一种规律 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 <= 300
  • pattern 只包含小写英文字母
  • 1 <= s.length <= 3000
  • s 只包含小写英文字母和 ' '
  • 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;
}