#44 同字母异序


  • 0

    const isAnagram = (str1, str2) => {
    
       str1 = str1.toUpperCase();
       str2 = str2.toUpperCase();
    
       if(str1 === str2 || str1.length !== str2.length){
           return false;
       }
    
       function fn(str) {
           return str.split("").sort(function (x, y) {
               return x > y ? 1 : x < y ? -1 : 0;
           });
       }
    
       if (fn(str1).join(",") === fn(str2).join(",")) {
           return true;
       } else {
           return false;
       }
    };
    

  • 0

    const isAnagram = (str1, str2) => {
    str1 = [...str1].sort().join('');
    str2 = [...str2].sort().join('');
    return str1 === str2;
    }


  • 0

    const isAnagram = (str1, str2) => str1.split('').sort().join('') == str2.split('').sort().join('')
    

  • 0

    // 方法一
    const isAnagram = (str1, str2) => {
      if(str1.length !== str2.length){
        return false;
      }
      let result = (str1 || '').split('').every((el) => {
        return str2.indexOf(el) > -1;
      });
      return result;
    }
    // 方法二
    const isAnagram = (str1, str2) => {
      let str1res = str1.split('').sort().join('');
      let str2res =str2.split('').sort().join('');
      return str1res === str2res;
    }
    

  • 0

    const isAnagram = (str1, str2) => str1.split( '' ).sort().join('') === str2.split( '' ).sort().join('')

    关键是发现一个规律,符合“相同字母”“顺序不同”的字符串,经过排序sort后是可以转化成一模一样的2个字符串的,直接对比2个字符串是否全等即可


  • 0

    const isAnagram = (str1, str2) => {
    if(str1.length !== str2.length){
    return false;
    }
    let arr1 = [...str1];
    let arr2 = [...str2];
    return arr1.sort().toString() === arr2.sort().toString();
    }


  • 0

    const isAnagram = (str1, str2) => {
    return str1.split('').sort().join('') == str2.split('').sort().join('');
    }


  • 0

    @nikaple 厉害


  • 0

    const isAnagram = (str1, str2) => {
    
    	let arr1 = str1.split('');
    	let arr2 = str2.split('');
    	let a =  arr1.every((item) => arr2.includes(item))
    	let b =  arr2.every((item) => arr1.includes(item))
    	return a && b && (arr1.length == arr2.length);
    }
    

  • 0

    统计每个字母的数量然后比较相等即可。或者偷懒一下,用sort


  • 0

    const isAnagram = (str1, str2) =>
    [...str1].sort().toString()===[...str2].sort().toString()


  • 0

    const isAnagram = (str1, str2) => {
      function toObj (str) {
        let O = {}
        Array.prototype.slice.call(str).forEach(v => {
          O[v] ? (O[v] = ++O[v]) : (O[v] = 1)
        })
        return O
      }
      let a = toObj(str1)
      let b = toObj(str2)
      let _a = Object.keys(a).length
      let _b = Object.keys(b).length
      if (_a === _b) {
        let index = 0
        for (let k in a) {
          if (a[k] !== b[k]) {
            break
          } else {
            index++
            if (index === _a) {
              return true
            }
          }
        }
      }
      return false
    }
    

  • 0

    const isAnagram = (str1, str2) => {
        for(let s of str1){
            const index = str2.indexOf(s) 
            if(index === -1)return false;
            str2 = str2.slice(0, index) + str2.slice(index + 1);
        }
        return str2 === '';
    }
    

  • 0

    jion有人用了,那就换一个吧

    const isAnagram = (str1, str2) => JSON.stringify(str1.split('').sort()) === JSON.stringify(str2.split('').sort())
    

  • 0

    const isAnagram = (str1, str2) => [...str1].sort().join('') === [...str2].sort().join('')
    
    const isAnagram = (str1, str2) =>  str1.length === str2.length && ![...str1].find(v => !str2.includes(v)) && ![...str2].find(v => !str1.includes(v));
    
    const isAnagram = (str1, str2) => {
      if (str1.length !== str2.length) {
        return false;
      }
      let str2Copy = str2;
      for (let i = 0; i < str1.length; i++) {
        if (!str2Copy.includes(str1[i])) {
          return false;
        } else {
          const str2CopyArr = [...str2Copy];
          str2CopyArr.splice(str2Copy.indexOf(str1[i]), 1);
          str2Copy = str2CopyArr.join('')
        }
      }
      return str2Copy.length === 0
    };
    

  • 0

    const isAnagram = (str1, str2) => {
      return str1.split('').sort().join('') === str2.split('').sort().join('')
    }
    

  • 0

    我的答案

    const isAnagram = (str1, str2) => /* TODO */
    {
      const splitStr = (str = '') => str.split('').sort()
      const strArryEqual = (arr1 = [], arr2 = []) => arr1.every((str,idx) => str === arr2[idx])
      return strArryEqual(splitStr(str1), splitStr(str2))
    }
    

    但其实 strArrayEqual 不是必须的, 可以将 splitStr 升级为 sortStr, 升级版如下

    const isAnagram = (str1, str2) => /* TODO */
    {
      const sortStr = (str = '') => str.split('').sort().join('')
      return sortStr(str1) === sortStr(str2)
    }
    

  • 0

    const isAnagram = (str1, str2) => str1.split('').sort().join('') == str2.split('').sort().join('')


登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待