Java如何删除字符串中的所有连续重复项?

 2860

这篇文章主要介绍了Java如何删除字符串中的所有相邻重复项的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java如何删除字符串中的所有相邻重复项文章都会有所收获,下面我们一起来看看吧。

算法:

栈一个比较常用的场景就是对字符串的操作,比如去重,退格,字符串表示的路径等,操作往往比较简单。

1、先把最为条件判断的字符串入栈

2、根据新到来的元素判断要不要出栈

3、最为比较的元素往往存在栈内,比较的时候,有时候比较栈顶元素,有时候整个栈都要比较


题目1: 删除字符串中的所有相邻重复项

代码实现:

  1. func removeDuplicates(S string) string {
  2.     ss := []byte(S)
  3.     var stacks []byte
  4.     for i := 0; i< len(ss);i++ {
  5.         if len(stacks) != 0 {
  6.             j:= len(stacks)-1
  7.             if ss[i] == stacks[j]{ // 与栈顶元素相同的话,删除栈内数据并且也不入栈
  8.                 stacks = stacks[:j]
  9.                 continue
  10.             }   
  11.         } 
  12.         stacks = append(stacks,ss[i])// 其他情况都入栈
  13.     }
  14.     return string(stacks)
  15. }
  16. /*
  17. 栈的使用,先入栈,后面的元素与栈顶元素相同,出栈并且新元素不入栈。
  18. 其他场景都入栈。
  19. */


题目2: 比较含退格的字符串

代码实现:

  1. func backspaceCompare(S string, T string) bool {
  2.     s := getStack(S)
  3.     t := getStack(T)
  4.     return s == t
  5. }
  6. func getStack(S string) string {
  7.     ss := []byte(S)
  8.     var stacks []byte
  9.     for i:=0;i<len(ss);i++{
  10.         if ss[i] != '#' {
  11.             stacks = append(stacks,ss[i])
  12.         } else {
  13.             if len(stacks) > 0 { // 注意 ”#abc“这种#在最前面的情况
  14.                 stacks = stacks[:len(stacks)-1]
  15.             }
  16.         }
  17.     }
  18.     return string(stacks)
  19. }


题目3:简化路径

代码实现:

  1. import "strings"
  2. func simplifyPath(path string) string {
  3.     tmps := strings.Split(path,"/")
  4.     var paths []string
  5.     for _,s:=range tmps {
  6.         if len(s) != 0{
  7.             paths = append(paths,s) 
  8.         }
  9.     }
  10.     // fmt.Println("name",paths)
  11.     var stacks []string
  12.     for i:=0;i<len(paths);i++{
  13.         if paths[i]==".." {
  14.             if len(stacks) > 0{
  15.                 stacks=stacks[:len(stacks)-1]
  16.             }
  17.             continue
  18.         }
  19.         if paths[i]!="."{
  20.             stacks=append(stacks,paths[i])
  21.         }
  22.     }
  23.     // fmt.Println("name",stacks,len(stacks))
  24.     resStr :=""
  25.     for idx,s:=range stacks {
  26.         resStr += s
  27.         if idx != len(stacks)-1{
  28.             resStr += "/"
  29.         }  
  30.     }
  31.     return "/"+resStr
  32. }


TAG标签:
本文网址:https://www.zztuku.com/index.php/detail-14139.html
站长图库 - Java如何删除字符串中的所有连续重复项?
申明:本文转载于《微信公众号 - 灰子学技术(huizixueguoxue)》,如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐