題目: 單詞規律
給定一種規律 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 包含了由單個空格分隔的小寫字母。
bool wordPattern(char * pattern, char * str){
char **hash = (char **)malloc(26 * sizeof(char*));
for (int i = 0; i < 26; ++i){
hash[i] = (char*)malloc(64 * sizeof(char)); //這里為什么要用64這個數字?
memset(hash[i], 0, 64 * sizeof(char));
}
int len = strlen(pattern);
for (int i = 0; i < len; ++i){ //從這個for回圈開始就不能全部看懂了
char *p = str;
while (p && *p != 0 && *p != ' ') ++p; //這里的p指標和零有關系嗎?怎么會用到零?
if (' ' == *p) *p++ = 0; //*p++ = 0是什么意思?指標怎么和零扯上關系了?
if (strlen(str) == 0)
return false;
int pos = pattern[i] - 'a';
if (strlen(hash[pos]) == 0){ //這里往下看不懂了
for (int j = 0; j < 26; ++j){
if (j != pos && strlen(hash[j]) > 0){
if (strcmp(hash[j], str) == 0) //字串str的長度不是大于字串hash[j]嗎?那函式strcmp結果怎么可能等于零?
return false;
}
}
strcpy(hash[pos], str);
}
else{
if (strcmp(hash[pos], str) != 0)
return false;
}
str = p;
}
if (strlen(str) > 0)
return false;
return true;
}
最后總結一下整體思路
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/82473.html
標籤:C語言
上一篇:QT Socket問題
下一篇:rtsp怎么穿透防火墻
