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;
}

提交结果截图

相关推荐
拓端研究室2 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
随缘而动,随遇而安4 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
IT古董4 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
黄雪超7 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice7 小时前
对象的finalization机制Test
java·开发语言·jvm
水木兰亭7 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
思则变7 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
lijingguang8 小时前
在C#中根据URL下载文件并保存到本地,可以使用以下方法(推荐使用现代异步方式)
开发语言·c#
¥-oriented8 小时前
【C#中路径相关的概念】
开发语言·c#
Jess078 小时前
插入排序的简单介绍
数据结构·算法·排序算法