前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode题解——717/844

Leetcode题解——717/844

作者头像
出其东门
发布2019-07-19 11:22:40
3720
发布2019-07-19 11:22:40
举报
文章被收录于专栏:01二进制01二进制

717. 1比特与2比特字符

题目

https://leetcode-cn.com/problems/1-bit-and-2-bit-characters/

题解

由于10, 11两个编码都是以1开头的,这意味着只要是以1开头的后面一个数必定是根这个1一起的字符编码。利用这一点:

用一个指针从前向后走,遇到1就走两步,遇到0就走一步,看最后是不是走到n-1的位置,说明最后的0只能是单独存在的,否则走到n的位置就说明这个0是跟前面的1一起的。

代码

代码语言:javascript
复制
class Solution {
    public boolean isOneBitCharacter(int[] bits) {
            int i = 0;
            for (i = 0; i < bits.length - 1; ) {
                if (bits[i] == 0) {
                    i++;
                } else
                    i += 2;
            }
            System.out.println(i);
            return i == bits.length - 1;
        }
}

844. 比较含退格的字符串

题目

https://leetcode-cn.com/problems/backspace-string-compare/

题解

解法1

将字符串变成字符数组后放入ArrayList中,遍历元素,如果出现'#',删除其前一个元素后再将其本身也删除,等遍历完成后,将最后的ArrayList变成一个字符串返回再进行比较即可。

解法2

采用栈的思想,遍历字符串,如果当前字符不是'#'则入栈,如果遇到了'#'就将前一个元素入栈,最后将栈内元素生成字符串返回进行比较即可

代码

解法1

代码语言:javascript
复制
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        System.out.println(main.backspaceCompare("ab#c", "ad#c"));
    }

    public boolean backspaceCompare(String S, String T) {
        return newString(S).equals(newString(T));
    }

    private String newString(String s) {
        Stack<Character> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();
        for (char c : s.toCharArray()) {
            if (c != '#')
                stack.push(c);
            else {
                if (!stack.isEmpty())
                    stack.pop();
            }
        }
        while (!stack.isEmpty())
            sb.append(stack.pop());
        return sb.toString();
    }
}

解法2

代码语言:javascript
复制
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        System.out.println(main.backspaceCompare("ab#c", "ad#c"));
    }

    public boolean backspaceCompare(String S, String T) {
        return newString(S).equals(newString(T));
    }

   public String newString(String s) {
       List<Character> characters = new ArrayList<>();
       for (char c : s.toCharArray()) {
           characters.add(c);
       }

       StringBuilder sb = new StringBuilder();
       int i = 0;
       while (i < characters.size()) {
           if (characters.get(i) == '#') {
               if (i - 1 >= 0) {
                   characters.remove(i - 1);
                   i--;
               }
               characters.remove(i);
           } else {
               i++;
           }
       }
       for (char c : characters) {
           sb.append(c);
       }
       return sb.toString();
   }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 01二进制 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 717. 1比特与2比特字符
    • 题目
      • 题解
        • 代码
        • 844. 比较含退格的字符串
          • 题目
            • 题解
              • 代码
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档