牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?
输入描述:
一个字符串,仅由小写字母组成。(字符串长度不大于300000)

输出描述:
一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。

示例1
输入

 abbc

输出

ac

示例2
输入

abba

输出
0
示例3
输入

bbbbb

输出

b

刷题自己的思路写了一个,利用递归的方法,但是测试用例的时候只通过了5/8,超时了就尴尬了。

package main
import("fmt""strings"
)
func main() {var str stringfmt.Scan(&str)splstr := strings.Split(str,"")rmstr := Remove(splstr)str =strings.Join(rmstr,"")if len(str) == 0{fmt.Print(0)}else {fmt.Print(str)}}
func Remove(str []string) []string {for i := 1; i < len(str); i++ {if str[i] == str[i-1]{str = append(str[:i-1],str[i+1:]...)}}for i := 1; i < len(str); i++ {if str[i] == str[i-1] {return Remove(str)}}return str
}

然后看了一下别人的解法,是用双向链表进行解答的,可以拿来学参考学习学习

package mainimport ("fmt"
)type Node struct {val bytepre *Nodenext *Node
}
type Queue struct {head *Node
}func main()  {var str stringfmt.Scan(&str)// 特殊情况if len(str) == 0 {fmt.Println(0)return}if len(str) == 1 {fmt.Println(str)return}link := &Queue{}//循环双向链表尾插法for i, _ := range str {if i == 0 {link.head = &Node{str[i],nil,nil}link.head.pre = link.headlink.head.next = link.head}else {newNode := &Node{str[i],link.head.pre,link.head}link.head.pre.next = newNodelink.head.pre = newNode}}//循环双向链表变非循环双向链表link.head.pre.next =nillink.head.pre = nilp := link.head//消除相邻重复的元素for p != nil && p.next != nil{if p.val == p.next.val {if p == link.head {//相同元素在开头,直接去掉前两个相同的link.head = p.next.nextp = link.head}else if p.next.next == nil{ //到结束了p.pre.next = nilp = nil}else {tmp := pp = p.prep.next = tmp.next.nextp.next.pre = p}}else {p=p.next}}if link.head == nil{fmt.Println(0)return}for link.head != nil {fmt.Printf("%v",string(link.head.val))link.head = link.head.next}return}

牛客题——点击消除(go)相关推荐

  1. 牛客题霸 NC9 二叉树中是否存在节点和为指定值的路径

    https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c 解决方案 Go func hasPathSum(root *Tre ...

  2. 牛客题霸 [矩阵元素查找] C++题解/答案

    牛客题霸 [矩阵元素查找] C++题解/答案 题目描述 已知int一个有序矩阵mat,同时给定矩阵的大小n和m以及需要查找的元素x,且矩阵的行和列都是从小到大有序的.设计查找算法返回所查找元素的二元数 ...

  3. 牛客题霸 [子数组最大乘积] C++题解/答案

    牛客题霸 [子数组最大乘积] C++题解/答案 题目描述 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积. 题解: 同时记录最大值和最小值,为什么?因为给的元素 ...

  4. 牛客题霸 [最大数] C++题解/答案

    牛客题霸 [最大数] C++题解/答案 题目描述 给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大,返回值需要是string类型 否则可能会溢出 题解: 将字符串存入ve ...

  5. 牛客题霸 [拼接所有的字符串产生字典序最小的字符串] C++题解/答案

    牛客题霸 [拼接所有的字符串产生字典序最小的字符串] C++题解/答案 题目描述 给定一个字符串的数组strs,请找到一种拼接顺序,使得所有的字符串拼接起来组成的字符串是所有可能性中字典序最小的,并返 ...

  6. 牛客题霸 [栈和排序] C++题解/答案

    牛客题霸 [栈和排序] C++题解/答案 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序 ...

  7. 牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案

    牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案 题目描述 给出一个转动过的有序数组,你事先不知道该数组转动了多少 (例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2) ...

  8. 牛客题霸 [滑动窗口的最大值] C++题解/答案

    牛客题霸 [滑动窗口的最大值] C++题解/答案 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一 ...

  9. 牛客题霸 [将字符串转化为整数] C++题解/答案

    牛客题霸 [将字符串转化为整数] C++题解/答案 题目描述 实现函数 atoi .函数的功能为将字符串转化为整数 提示:仔细思考所有可能的输入情况.这个问题没有给出输入的限制,你需要自己考虑所有可能 ...

最新文章

  1. wechall.net/stegano 解题心得
  2. fedora 使用 vnc 远程 fedora 28 主机
  3. [js插件]JqueryUI日期插件
  4. 开发一个Swing功能时的一点总结
  5. Centos如何使用SSH远程连接主机
  6. 打造Android微信朋友圈下拉刷新控件
  7. angular 实现modal windows效果(即模态窗口,半透明的遮罩层),以及bootstrap(css,components,js)的初步学习...
  8. mybatis-plus 自定义UpdateWrapper(一)实现列自增
  9. M1 macbook安装jdk
  10. 【无人机】一文读懂无人机飞行原理
  11. Sublime格式化代码快捷键
  12. 基于MT5的沪深股票回测二 导入历史数据
  13. 家庭监控,网络摄像头(OpenWRT平台下Mjpg-Streamer+Ngrok实现方案)
  14. PHP 中openssl_pkey_get_private函数获取私钥返回 FALSE 的问题
  15. 骨传导耳机品牌排行榜前十,目前最好用的几款推荐
  16. 9个你需要知道的PHP函数和功能
  17. 华师计算机学院新上任书记,华师大4位校领导履新 任友群任常务副书记
  18. mysql数据库存储生僻字_mysql 生僻字存储
  19. 七、加载3d tiles模型
  20. linux设置ssd4k对齐,linux查看硬盘4K对齐方法

热门文章

  1. ERD Online 4.0.3_fix 元数据在线建模(免费、私有部署)
  2. ASEMI整流二极管10A10参数,10A10压降,10A10作用
  3. idea使用lombok的时候无法找到log,编译时无法找到log
  4. html字体铺盖颜色,这5种颜色的褥子不要去买,盖上会让你的家财散尽!
  5. 高中计算机听课总结,信息技术听课心得.doc
  6. 黑马程序员_java高级篇网络编程TCP实战Day8(上)
  7. linux系统下键盘按键的重新映射——xmodmap工具和xev工具
  8. 贝尔商道赚钱思维36道第08道:聪公移山
  9. 测试学习——性能测试(一)
  10. 大数据架构Spark 进阶