题目描述:
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.
本人思路:把字符串转化为字符串数组后,先比较长度;再用pattern里的字符替换掉字符串。全部替换后再重新转化为字符串,并与pattern字符串相比较,得出结论。
代码如下(方法略笨拙,可跳过看第二种,哈哈哈):
public bool WordPattern(string pattern, string str) { //char[] patternAttr=new char[pattern.Length] char[] patternAttr=pattern.ToCharArray(); string[] strAttr=str.Split(' '); if(patternAttr.Length!=strAttr.Length) { return false; } else { for(int i=0;i<strAttr.Length;i++) { if (patternAttr[i] != ' ') { for(int j=i+1;j<strAttr.Length;j++) { if(strAttr[j]==strAttr[i]) { strAttr[j]=patternAttr[i].ToString()+"!"; patternAttr[j] = ' '; } } for (int k = i + 1; k < strAttr.Length;k++ ) { if(patternAttr[k]==patternAttr[i]) { patternAttr[i] = ' '; } } strAttr[i] = patternAttr[i].ToString()+"!"; patternAttr[i] = ' '; } } str=String.Join("",strAttr); str=str.Replace("!",""); if(str==pattern)return true; else return false; } }
第二种解题方法:用字典
public class Solution { public bool WordPattern(string pattern, string str) { string[] values = str.Split(' '); if(pattern.Length!=values.Length) { return false; } Dictionary<Char,String> dic=new Dictionary<Char,String>(); for(int i=0;i<pattern.Length;i++) { if(!dic.ContainsKey(pattern[i])) { if (!dic.ContainsValue(values[i])) { dic.Add(pattern[i], values[i]); } else return false; } else { if(!dic[pattern[i]].Equals(values[i])) { return false; } } } return true; } }