1. 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
  2. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
  1. 示例1:
  2. 输入: pattern = "abba", str = "dog cat cat dog"
  3. 输出: true
  4. 示例 2:
  5. 输入:pattern = "abba", str = "dog cat cat fish"
  6. 输出: false
  7. 示例 3:
  8. 输入: pattern = "aaaa", str = "dog cat cat dog"
  9. 输出: false
  10. 示例 4:
  11. 输入: pattern = "abba", str = "dog dog dog dog"
  12. 输出: false

方法一:

  1. /**
  2. * @param {string} pattern
  3. * @param {string} s
  4. * @return {boolean}
  5. */
  6. var wordPattern = function(pattern, s) {
  7. var ch2word = new Map()
  8. var word2ch = new Map()
  9. var arr = s.split(' ')
  10. if(pattern.length != arr.length) return false;
  11. for(let i=0;i<pattern.length;i++){
  12. if(ch2word.has(pattern[i])==true){
  13. if(ch2word.get(pattern[i])!=arr[i]){
  14. return false
  15. }
  16. }else{
  17. ch2word.set(pattern[i],arr[i])
  18. }
  19. if(word2ch.has(arr[i])==true){
  20. if(word2ch.get(arr[i])!=pattern[i]) return false
  21. }else{
  22. word2ch.set(arr[i],pattern[i])
  23. }
  24. }
  25. return true
  26. };

方法二:

  1. var wordPattern = function(pattern, s) {
  2. const a = s.split(' ')
  3. if (pattern.length !== a.length) return false
  4. for(let i = 0; i < pattern.length; i++)
  5. if (pattern.indexOf(pattern[i]) !== a.indexOf(a[i])) return false
  6. return true
  7. };