Easy
73093FavoriteShare
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.
Example 1:
Input: pattern = "abba", str = "dog cat cat dog"
Output: true
Example 2:
Input:pattern = "abba", str = "dog cat cat fish"
Output: false
Example 3:
Input: pattern = "aaaa", str = "dog cat cat dog"
Output: false
Example 4:
Input: pattern = "abba", str = "dog dog dog dog"
Output: false
Notes:
You may assume pattern contains only lowercase letters, and strcontains lowercase letters that may be separated by a single space.
C++:
/*
* @Author: SourDumplings
* @Date: 2019-09-06 10:34:12
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/word-pattern/
*/
class Solution
{
public:
bool wordPattern(string pattern, string str)
{
istringstream is(str);
map<char, string> m1;
map<string, char> m2;
for (auto &&c : pattern)
{
string s;
if (is.eof())
{
return false;
}
is >> s;
if (m1.find(c) == m1.end())
{
if (m2.find(s) == m2.end())
{
m1[c] = s;
m2[s] = c;
}
else
{
return false;
}
}
else if (m1[c] != s)
{
return false;
}
}
if (is.eof())
{
return true;
}
return false;
}
};
Java:
import java.util.Hashtable;
import java.util.Map;
/*
* @Author: SourDumplings
* @Date: 2019-09-06 10:46:09
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/word-pattern/
*/
class Solution
{
public boolean wordPattern(String pattern, String str)
{
Map<Character, String> m1 = new Hashtable<>();
Map<String, Character> m2 = new Hashtable<>();
String[] sA = str.split(" ");
int l = pattern.length();
if (l != sA.length)
{
return false;
}
for (int i = 0; i < l; i++)
{
String s = sA[i];
Character c = pattern.charAt(i);
if (!m1.containsKey(c))
{
if (!m2.containsKey(s))
{
m1.put(c, s);
m2.put(s, c);
}
else
{
return false;
}
}
else if (!m1.get(c).equals(s))
{
return false;
}
}
return true;
}
}