290. Word Pattern(单词规律)

题目描述

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

提示:

复制代码
1 <= pattern.length <= 300
pattern 只包含小写英文字母
1 <= s.length <= 3000
s 只包含小写英文字母和 ' '
s 不包含 任何前导或尾随对空格
s 中每个单词都被 单个空格 分隔

题目分析

首先判断pattern串的长度与s串的单词数是否相等,如果不相等那么这两个字符串的模式必然不一样,如果相等了在继续进行下一项的判断,因为总共有26个小写字母,所以我们可以利用字母的值为串的下标将单词存储起来,如果字母一样就检查当前单词是否出现过,如果没有出现过记录下来此单词,如果已经出现过了那么就将当前单词与已出现的单词作比较,如果相同那么目前的模式仍然一样。依次比对下去即可。

代码

c 复制代码
bool wordPattern(char* pattern, char* s) {
    char *x[26];
    for(int i=0; i<26; i++){
        x[i] = NULL;
    }
    int pattern_length = 0;
    while(pattern[pattern_length++]!='\0');
    pattern_length--;
    int k = 0;
    int count = 0;
    for(;s[k]!='\0'; k++){
        if(s[k]==' '){
            count++;
        }
    }
    if(k!=0){
        count++;
    }
    if(count!=pattern_length){
        return false;
    }
    int i=0; 
    int j=0;
    for(i=0; pattern[i]!='\0'; i++){
        int length_word = 0;
        if(x[pattern[i]-'a']==NULL){
            while(s[j+length_word]!=' '&&s[j+length_word]!='\0'){
                length_word++;
            }
            x[pattern[i]-'a'] = (char *)malloc(sizeof(char)*(length_word+1));
            for(int k=0; k<length_word; k++){
                x[pattern[i]-'a'][k] = s[j+k];
            }
            x[pattern[i]-'a'][length_word] = '\0';
            j = j + length_word+1;   
        }else{
            char *y = NULL;
             while(s[j+length_word]!=' '&&s[j+length_word]!='\0'){
                length_word++;
            }
            y = (char *)malloc(sizeof(char)*(length_word+1));
            for(int k=0; k<length_word; k++){
                y[k] = s[j+k];
            }
            y[length_word] = '\0';
            j = j + length_word+1;
            if(strcmp(x[pattern[i]-'a'], y)){
            	return false;
			}
        }
    }
    for(int i=0; i<26; i++){
    	for(int j=i+1; j<26; j++){
			if(x[i]!=NULL&&x[j]!=NULL){
				if(!strcmp(x[i], x[j])){
					return false;
				}
			}
		}
	}
    return true;
}

提交结果截图

相关推荐
ZHOUPUYU9 小时前
PHP 8.3网关优化:我用JIT将QPS提升300%的真实踩坑录
开发语言·php
寻寻觅觅☆13 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
偷吃的耗子14 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
l1t14 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
赶路人儿14 小时前
Jsoniter(java版本)使用介绍
java·开发语言
化学在逃硬闯CS14 小时前
Leetcode1382. 将二叉搜索树变平衡
数据结构·算法
ceclar12315 小时前
C++使用format
开发语言·c++·算法
码说AI15 小时前
python快速绘制走势图对比曲线
开发语言·python
Gofarlic_OMS15 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
星空下的月光影子15 小时前
易语言开发从入门到精通:补充篇·网络爬虫与自动化采集分析系统深度实战·HTTP/HTTPS请求·HTML/JSON解析·反爬策略·电商价格监控·新闻资讯采集
开发语言