首页 > 试题广场 >

单词消消乐

[编程题]单词消消乐
  • 热度指数: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个单词
  
char* WordsMerge(char** Words, int WordsLen ) {
    // write code here
     char *pStr1 = (char *)malloc(1000);
     char *pStr = pStr1;
    unsigned char i = 0;
    unsigned char j = 0;
    for(i = 0; i < WordsLen; i++)
    {
        for(j = 0; *(*(Words + i) + j); j++)
        {
            if(i >= 1)
            {
                if(*pStr == *(*(Words + i) + j))
                {
                    *pStr = '\0';
                    pStr--;
                    continue;
                }
                else
                {
                    pStr++;
                }
            }
            *pStr = *(*(Words + i) + j);
            if(*(*(Words + i) + j + 1))
            {
                pStr++;
            }
        }
    }
    return pStr1;
}

发表于 2022-03-10 22:32:07 回复(0)