您的位置:首页 > 其它

【LeetCode】290. Word Pattern

2016-03-26 15:50 225 查看
Given a
pattern
and a string
str
,
find if
str
follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in
pattern
and
a non-empty word in
str
.

Examples:

pattern =
"abba"
, str =
"dog
cat cat dog"
should return true.
pattern =
"abba"
, str =
"dog
cat cat fish"
should return false.
pattern =
"aaaa"
, str =
"dog
cat cat dog"
should return false.
pattern =
"abba"
, str =
"dog
dog dog dog"
should return false.

Notes:

You may assume
pattern
contains only lowercase letters, and
str
contains
lowercase letters separated by a single space.

class Solution {
public:
bool wordPattern(string pattern, string str) {
vector<string>vc;
map<char,string>m1;
map<string,char>m2;
if(pattern.length()==0 && str.length()!=0) return false;
if(pattern.length()!=0 && str.length()==0) return false;
int len1 = pattern.size();
int len2 = str.size();
string word;
for(int i =0; i < len2; i++)
{
if(str[i] != ' ')
word += str[i];
else
{
vc.push_back(word);
word = "";
}
if(i==len2-1)
vc.push_back(word);
}
if(vc.size() != len1) return false;
for(int j =0; j <len1; j++)
{
map<char,string>::iterator it1;
map<string, char>::iterator it2;
it1 = m1.find(pattern[j]);
it2 = m2.find(vc[j]);
if(it1==m1.end() && it2==m2.end())
{
m1[pattern[j]] = vc[j];
m2[vc[j]] = pattern[j];
}
else if(it1!=m1.end() && it2!=m2.end())
{
if(m1[pattern[j]] != vc[j] || m2[vc[j]]!= pattern[j])
return false;
}
else return false;
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: