《leetCode》:Word Pattern

来源:互联网 发布:西方记者知乎 编辑:程序博客网 时间:2024/05/20 22:26

题目

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.

思路

这个题用java来实现是比较简单的,利用前后指针逐一比较即可,如果模式中前后指针所指向的字符相等或不相等,则字符串中的单词也要相等或不相等。否则返回false。

public boolean wordPattern(String pattern, String str) {        String []s=str.split(" ");        char []chArr=pattern.toCharArray();        int len=chArr.length;        if(s.length!=len){//如果长度不相等,则肯定不会匹配此模式。            return false;        }        int start=0;        int end=len-1;        while(start<end){            if((chArr[start]==chArr[end]&&s[start].equals(s[end])||(chArr[start]!=chArr[end]&&!s[start].equals(s[end])))){//要么都相等,要么都不相等                start++;                end--;            }            else{                return false;            }        }        Set<Character> set=new HashSet<Character> ();        for(char ch:chArr){            set.add(ch);        }        Set<String> set1=new HashSet<String>();        for(String ss:s){            set1.add(ss);        }        if(set1.size()==set.size()){            return true;        }        return false;    }
1 0