题目:
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.
给定一种 模式(pattern
)和一个字符串(str),检测该字符串是否遵循给定的这种模式。
这里说的“遵循”意味着一个完整的匹配,给定模式的每一个字符与给定字符串的每一个非空单词之间是一种双射的存在。
note:
可以假设模式中只包含小写字符,字符串中包含的小写字符由单个的空格隔开。
思路:
利用istringstream库函数从字符串中分离出单个单词,根据信息建立映射表,判断新检测到的元素与映射表中是否相等,不相等返回false;
代码:0ms
class Solution { public: bool wordPattern(string pattern, string str) { map<char, int> pat; map<string, int> st; int i = 0; int n = pattern.size(); istringstream in(str); //从字符串中分离出单词 for(string word; in >> word; ++i){ //in >> word 调用in函数,将每个单词赋给word变量 if(i==n || pat[pattern[i]] != st[word]){ return false; } pat[pattern[i]] = st[word] = i+1; } return i==n; } };java版:利用字符串api处理字符串
代码:3ms
public class Solution { public boolean wordPattern(String pattern, String str) { String[] words = str.split(" "); if(words.length != pattern.length()){ return false; } Map index = new HashMap(); for(Integer i=0; i<words.length; ++i){ if(index.put(pattern.charAt(i), i) != index.put(words[i], i)){ return false; } } return true; } }