首页 > 试题广场 >

单词消消乐

[编程题]单词消消乐
  • 热度指数:3702 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
"一清二白,白头偕老,老当益壮.....",牛牛和牛妹在玩成语接龙,但是牛妹因为语文不好总是输,于是她想出了一个新的游戏去和牛牛玩,牛妹会给牛牛n个单词,牛妹要求牛牛将这n个单词按照以下方式合并:

1.从左往右合并单词,将合并后的单词作为第一个单词再与后面单词合并
例如有三个单词"a","b","c",先将"ab"合并,最后将合并后的"ab"与"c"合并得到"abc"。
2.如果最左边单词结尾字母与其后面一个的单词的开始字母相同,则最左边单词的结尾字母与之后一个单词的开始字母都会抵消掉而消失,重复上述操作直到某一个单词为空或者最左端的结尾字母与之后单词的开始字母不同,然后合并这两个单词作为一个单词放置再最左边。

例如 "aab" "bac"合并之后会得到"ac"


返回最终合并后的单词。
若为空则返回一个空串。
示例1

输入

["aab","bac","ccd"]

输出

"acd"

说明

"aab"与"bac"合并得到"ac"
"ac"再与"ccd"合并得到"acd"

备注:
string数组 的形式给定n个单词
  

/**
       * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
       *
       *
       * @param Words string字符串一维数组
       * @return string字符串
       */
      function WordsMerge(Words) {
        // write code here
        if (!Words.length) {
          return "";
        }

        // 定义一个字符串模拟栈操作
        let str = "";

        str = Words[0];
        if (Words.length === 1) {
          return str;
        }

        for (let i = 1; i < Words.length; i++) {
          let temp = Words[i];
          for (let j = 0; j < temp.length; j++) {
            const start = temp[j];
            const end = str.slice(str.length - 1, str.length);
            // 最后等与开始
            // 截取最后的元素
            if (end === start) {
              str = str.slice(0, str.length - 1);
            } else {
              // 不相等直接拼接上去
              str = str.concat(temp.slice(j, temp.length));
              break;
            }
          }
        }
        return str;
      }

发表于 2022-04-12 17:03:06 回复(0)
93%通过率,为啥呀

function WordsMerge(Words) {
  // write code here
  let stack = [];

  // 先让第一个单词入栈
  for (let i = 0; i < Words[0].length; i++) {
    stack.push({
      letter: Words[0][i],
      flag: 0
    });
  }

  for (let i = 1; i < Words.length; i++) {
    let word = Words[i]
    for (let j = 0; j < word.length; j++) {
      const ch = word[j];
      const last = stack[stack.length - 1];
      if (last.letter === ch && last.flag !== i) {
        stack.pop()
      } else {
        stack.push({
          letter: ch,
          flag: i
        })
      }
    }
  }
  var strarr = stack.map((item) => item.letter)
  return strarr.join('')
}

module.exports = {
  WordsMerge: WordsMerge
};



发表于 2020-08-19 15:15:32 回复(0)