您的位置:首页 > 编程语言 > Java开发

(java)Word Pattern

2015-12-29 09:18 405 查看
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中对应位置的子串是否与字典中的一样,如果没有,则将此匹配规则加入到字典中。

注意:在字典中的索引项没有pattern中对应的位置的字母时,还要判断此字母在str中对应的子串是否在字典有含有

代码如下(已通过leetcode)

public class Solution {

public boolean wordPattern(String pattern, String str) {

String[] strs=str.split(" ");

if(pattern.length()!=strs.length) return false;

String temp="";

Map<Character,String>map=new HashMap<Character,String>();

for(int i=0;i<strs.length;i++) {

if(map.containsKey(pattern.charAt(i)))

{

if(map.get(pattern.charAt(i)).equals(strs[i])) temp+=strs[i];

else return false;

}

else {

if(map.containsValue(strs[i])) return false;

else {

map.put(pattern.charAt(i), strs[i]);

temp+=strs[i];

}

}

temp+=" ";

}

temp=temp.substring(0, temp.length()-1);

System.out.println(temp);

if(str.equals(temp)) return true;

else return false;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: