LeetCode 290 單詞模式

2022-09-06 01:42:12 字數 3940 閱讀 1481

給定一種pattern(模式)和乙個字串str,判斷str是否遵循相同的模式。

這裡的遵循指完全匹配,例如,pattern裡的每個字母和字串str中的每個非空單詞之間存在著雙向連線的對應模式。

示例1:

輸入:pattern ="abba", str ="dog cat cat dog"輸出:true
示例 2:

輸入:pattern ="abba", str ="dog cat cat fish"輸出:false
示例 3:

輸入:pattern ="aaaa", str ="dog cat cat dog"輸出:false
示例 4:

輸入:pattern ="abba", str ="dog dog dog dog"輸出:false
說明:你可以假設pattern只包含小寫字母,str包含了由單個空格分隔的小寫字母。    

提供兩個思路吧

第乙個思路最簡單就是用字串雜湊,用pattern的每乙個位置的字幕。作為雜湊表的key,然後將str的單詞作為value打進去雜湊表

這個思路最簡單了

第二個思路:我直接就是上去模擬,首先先把pattern的長度和str的空格數+1做乙個比較,如果不想當就直接return false;

用乙個結構體記錄一對一的結果:

1

struct

node

2 a[200];

結構體然後在把遍歷一遍patter,因為題目只要求小寫字母,所以每個a[i]對對應乙個字母,把他對於的單詞拷貝到ha

每次拷貝前先跑一遍是否出現重複,如果出現重複就return false;

最後再看一遍i,j是否跑到了len1,len2-1

大體思路就是這樣子,具體看我**

1

bool wordpattern(char* pattern, char*str)221

else

2226

for(i=0; i)

2740

if(str[j]=='')

4146}47

//printf("%d\n",flag1);

48for(j=0; j)

49 tem[top++]=str[j];

50if(flag1==len2-1

)51 tem[top++]=str[flag1];

52 strcpy(a[(int

)pattern[i]].ha,tem);

5354

//printf("[%s]",a[(int)pattern[i]].ha);55}

56else

if(flag1!=-1&&flag2==-1)57

68if(str[j]=='')

6973}74

for(int j=flag1+1; j)

75 tem[top++]=str[j];

7677

if(flag2==len2-1

)78 tem[top++]=str[flag2];

7980

if(pattern[i]==pattern[i-1

])81

85///

printf("[[[%s",tem);

86for(int k=96; k<=122; k++)

8795 strcpy(a[(int

)pattern[i]].ha,tem);

969798}

99else

100115

if(str[j]=='')

116120

121}

122for(int j=flag1+1; j)

123 tem[top++]=str[j];

124125

if(flag2==len2-1

)126 tem[top++]=str[flag2];

127128

if(a[(int)pattern[i]].ha[0]!=-1

)129

}\n",a[(int)pattern[i]].ha);

131//

printf("%s\n",tem);

132if(strcmp(a[(int)pattern[i]].ha,tem)!=0

)133

return

false

;134

}135

else

136147

}148 strcpy(a[(int

)pattern[i]].ha,tem);

149}

150151

}152

else

153\n",flag1,flag2);

155if(flag1==len2-1||flag2==len2-1

)156

return

true

;157 top=0

;158

for(int j=flag2+1; j<=len2; j++)

159164

if(str[j]=='')

165169

}170

for(int j=flag2+1; j)

171 tem[top++]=str[j];

172173

if(flag1==len2-1

)174 tem[top++]=str[flag1];

175176

if(a[(int)pattern[i]].ha[0]!=-1

)177

\n",tem);

180if(strcmp(a[(int)pattern[i]].ha,tem)!=0

)181

return

false

;182

}183

else

184194

}195 strcpy(a[(int

)pattern[i]].ha,tem);

196}

197198

}199

}200

}201

202if(i!=len1)

203return

false

;204

205 printf("

111"

);206

if(flag1>flag2)

207 else

214215

return

true

;216 }

wordpattern

Leetcode 290 單詞模式

給定一種pattern 模式 和乙個字串str,判斷str是否遵循相同的模式。這裡的遵循指完全匹配,例如,pattern裡的每個字母和字串str中的每個非空單詞之間存在著雙向連線的對應模式。示例1 輸入 pattern abba str dog cat cat dog 輸出 true示例 2 輸入 ...

LeetCode 290 單詞模式

給定一種pattern 模式 和乙個字串str,判斷str是否遵循相同的模式。這裡的遵循指完全匹配,例如,pattern裡的每個字母和字串str中的每個非空單詞之間存在著雙向連線的對應模式。示例1 輸入 pattern abba str dog cat cat dog 輸出 true示例 2 輸入 ...

LeetCode290 單詞模式

給定一種 pattern 模式 和乙個字串 str 判斷 str 是否遵循相同的模式。這裡的遵循指完全匹配,例如,pattern 裡的每個字母和字串 str 中的每個非空單詞之間存在著雙向連線的對應模式。示例1 輸入 pattern abba str dog cat cat dog 輸出 true ...