1.需要
- ルールを考える
pattern
と、文字列str
、裁判官str
と同じルールに従うかどうかを。 - 従い 、ここで 完全な一致を指す。例えば、 間の双方向の接続が存在する
pattern
文字列の各文字str
との各非空の単語列が 。
例1:
输入: pattern = "abba", str = "dog cat cat dog" 输出: true
例2:
输入:pattern = "abba", str = "dog cat cat fish" 输出: false
説明: 単一のスペースで区切られた 小文字を含め、小文字のみが含まれている
と想定でき ます。pattern
str
第二に、ハッシュテーブル
2.1思考分析
- この質問のアイデアは、同形文字列のハッシュテーブル最適化アルゴリズムと一致しています:https://blog.csdn.net/Sruggle/article/details/114001098 ;
- つまり、文字がキーで単語が値です。次の2つの条件のいずれかが真の場合、偽になります。①ハッシュテーブルに現在の文字はありませんが、現在の文字のマッピングはあります。②そこにあります。はハッシュテーブルの現在の文字ですが、そのマッピングは現在の単語とは異なります。
2.2コードの実装
class Solution {
public boolean wordPattern(String pattern, String s) {
String[] words = s.split(" ");
if(pattern.length() != words.length) {
return false;
}
Map<Character, String> map = new HashMap<>();
for(int i = 0; i < pattern.length(); i++) {
char c = pattern.charAt(i);
String word = words[i];
if(!map.containsKey(c)) {
//不包括字符,却存在其映射单词
if(map.containsValue(word)) {
return false;
}
map.put(c, word);
} else {
//包括字符,其映射与存储的值不相同
if(!map.get(c).equals(word)) {
return false;
}
}
}
return true;
}
}
2.3複雑さの分析
- 時間計算量はO(N)です。
- スペースの複雑さはO(N)です。