LeetCode 271. Encode and Decode Strings(字符串编解码)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

原题网址:https://leetcode.com/problems/encode-and-decode-strings/

Design an algorithm to encode a list of strings to a string. The encoded string is then sent over the network and is decoded back to the original list of strings.

Machine 1 (sender) has the function:

string encode(vector<string> strs) {
  // ... your code
  return encoded_string;
}
Machine 2 (receiver) has the function:
vector<string> decode(string s) {
  //... your code
  return strs;
}

So Machine 1 does:

string encoded_string = encode(strs);

and Machine 2 does:

vector<string> strs2 = decode(encoded_string);

strs2 in Machine 2 should be the same as strs in Machine 1.

Implement the encode and decode methods.

Note:

  • The string may contain any possible characters out of 256 valid ascii characters. Your algorithm should be generalized enough to work on any possible characters.
  • Do not use class member/global/static variables to store states. Your encode and decode algorithms should be stateless.
  • Do not rely on any library method such as eval or serialize methods. You should implement your own encode/decode algorithm.

思路:把字符串数组按照长度+内容的格式进行编解码。

public class Codec {

    // Encodes a list of strings to a single string.
    public String encode(List<String> strs) {
        char[] lenstr = new char[4];
        StringBuilder sb = new StringBuilder();
        for(String str: strs) {
            int len = str.length();
            for(int j=3; j>=0; j--) {
                lenstr[j] = (char)(len & 0b11111111);
                len >>= 8;
            }
            sb.append(new String(lenstr));
            sb.append(str);
        }
        return sb.toString();
    }

    // Decodes a single string to a list of strings.
    public List<String> decode(String s) {
        List<String> decoded = new ArrayList<>();
        int pos = 0;
        while (pos < s.length()) {
            int len = 0;
            for(int i=0; i<4; i++) len = (len<<8) + s.charAt(pos++);
            decoded.add(s.substring(pos, pos+len));
            pos += len;
        }
        return decoded;
    }
}

// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(strs));

LeetCode 271. 字符串的编码与解码(4位16进制字符+字符串 文章目录1. 题目2. 解题 1. 题目 请你设计一个算法,可以将一个 字符串列表 编码成为一个 字符串。 这个编码后的字符串是可以通过网络进行高效传送的,并且可以在接收端被解码回原来的字符串列表。 1 号机(发送方)有如下函数: string encode(vector<string> strs) { // ... your code return encoded_string; } 2 号机(接收方)有如下函数: vector<string> decode(string 阅读详情

相关推荐

[Leetcode]271. Encode and Decode Strings

嗯,这一题主要是为了保证encodedecode的唯一性,我面google的时候遇到过,当时面试官给的提示很简单,随便定义一个字符为分隔符,字符串之间用分隔符定义开来,如果遇到分隔符就变成两个。举个例子,如果你拿逗号来做分隔符。 那么"ab", "b,b", "d,b,ee" encode之后就会变成"ab,b,,b,d,,b,,ee,",decode也很简单,遇到单个逗号就表示一个字符串...

chaochen1407的专栏 743

leetCode394. 字符串解码(超详细分析) by JavaScript

例如,"abcd"可能会被编码为“1[a]1[b]1[c]1[d]”,也可能会被编码为’abcd’,同时,s也可能会被编码为嵌套的形式,例如’6[a2[bcd]]’。分析此问题,输入数据s是一个由数字字符、字母字符和方括号字符组成的字符串,题目保证输入数据有效,那么可以发现’[]’里面的内容一定对应’[’左边紧挨着的数字,由于输入的数据可以进行方括号的嵌套,所以使用栈来解决这个问题完美契合题目的特性。(a) 如果当前字符是数字字符,则向后查找进行数字字符的拼接,作为curNum,直到遇到’[’。

tangpinger的博客 2543

稀疏自编码器性能验证与工程实践

稀疏自编码器(SAE)作为神经网络的重要变体,通过引入稀疏性约束实现高效特征提取。其核心原理是利用KL散度等惩罚项控制隐藏层激活度,相比传统自编码器能学习更具判别性的特征表示。在工程实践中,SAE在图像重构和分类任务上展现出显著优势,如在MNIST数据集上重构误差降低298%,分类准确率提升8.2%。关键技术实现涉及PyTorch框架下的稀疏性控制、激活函数优化(如LeakyReLU解决神经元死亡问题)以及严格的随机基线对比实验设计。典型应用场景包括计算机视觉中的特征降维和迁移学习,但需注意计算开销与稀疏度

weixin_30664615的博客 366

Leetcode 字符串解码

每次遇到时,将当前的result保存到,并清空result确保每个括号对内的字符串能够独立解析。保证括号内的字符串能够正确重复并与之前的部分拼接。这一步处理使得代码可以正确解析嵌套和连续的编码字符串。用来增量式地拼接字符串,每次重复操作后都把结果追加到temp,这样可以避免频繁创建新对象,并且不会在循环中被清空。只是把中的累积结果转换成字符串后继续后续的处理。这种设计确保每层括号解析完后,拼接结果能够累积并正确组合,最终得到完整的解码字符串

985小菜鸡 1646

Leetcode 271: Encode and Decode Strings

Design an algorithm to encodea list of stringstoa string. The encoded string is then sent over the network and is decoded back to the original list of strings. Machine 1 (sender) has the function:...

weixin_30687811的博客 87

Leetcode 394. 字符串解码

Leetcode 394. 字符串解码 题目 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 1

专注如一的博客 757

Leetcode394. 字符串解码——python

题目 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 示例: s = "3[a]2[bc]", 返回 "aaabcbc". s = "3[a2[c]]

weixin_41729258的博客 688

LeetCode394 字符串解码

LeetCode394. 字符串解码

weixin_45771864的博客 560

【算法入门】LeetCode 394:字符串解码 - 栈的应用(Java & JavaScript)|字符串解码问题:栈与递归的巧妙应用|解码括号内的重复模式

字符串解码问题是一个经典的字符串处理问题,通过使用栈来管理字符和重复次数,我们可以高效地解码字符串。希望本文能帮助你更好地理解这一问题及其解决方案,掌握栈的基本应用是解决许多类似问题的关键。本题可以使用栈来解决。栈是一种后进先出(LIFO)的数据结构,非常适合处理嵌套结构的问题。可以尝试解决类似的栈的应用问题,例如:LeetCode 20:有效的括号LeetCode 150:逆波兰表达式求值希望这篇博客能够帮助你理解字符串解码问题,并掌握解决 LeetCode 394 题的方法。祝你刷题愉快!

南北极之间 1640

LeetCode 394.字符串解码

LeetCode394.字符串解码

qq_57596472的博客 437

leetcode字符串解码

leetcode-字符串解码

ningmengzhihe的博客 591

[leetcode]字符串解码

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".s = "3[a2[c]]", 返回 "accaccacc".s = "3[a]2[bc]", 返回 "aaabcbc".

xiaocong1990的博客 399

【栈】Leetcode 字符串解码

这道题有四种情况:1.遍历的时候遇到数字,我们计算并保存数字,将它加入到数字栈中;2.遍历的时候遇到[,我们就把字符保存,加入到字符栈中;3.当遇到],我们及时按照数字栈的栈顶元素的数字,添加字符栈中栈顶元素的次数;4.如果当前遍历的时候上述情况什么都不是,说明是正常的字符串,直接在字符栈的栈顶中添加即可

皮蛋的Bk 531

leetcode271.字符串的编码与解码

题目来源 leetcode271.字符串的编码与解码 题目描述 请你设计一个算法,可以将一个字符串列表编码成一个字符串。这个编码后的字符串是可以通过网络进行高效传送的,并且可以在接收端被解码回原来的字符串列表。 1 号机(发送方)有如下函数: string encode(vector<string> strs) { // ... your code return encoded_string; } 2 号机(接收方)有如下函数: vector<string> deco

OceanStar的博客 1280

LeetCode【394】字符串解码

参考:https://blog.csdn.net/xushiyu1996818/article/details/107973300。

qq422243639的博客 208

LeetCode-字符串解码

一、辅助栈解法: 思路和判断括号有效的差不多,只是在这个题目里需要分解出子问题,不断将子问题的解压入栈中 1、遇到数字就乘10构造数字 2、遇到左括号就压栈,在之前将构造好的数字压栈,然后数字num清零 3、一直到遇到右括号开始出栈拼字符串 4、最后栈里保存的所有字符串拼起来就是最终结果 public String decodeString(String s) { Stack<String> stack = new Stack(); char[]..

yshuoo的博客 720

LeetCode - 271字符串的编码与解码

【中等】字符串

学哥斌的博客 1512

Leetcode394 字符串解码 递归和非递归

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。输入:s = “2[abc]3[cd]ef” 输出:“abcabccdcdcdef”输入:s = “abc3[cd]xyz” 输出:“abccdcdcdxyz”输入:s = “3[a2[c]]” 输出:“accaccacc”输入:s = “3[a]2[bc]” 输出:“aaabcbc”给定一个经过编码的字符串,返回它解码后的字符串

qq_42747210的博客 636

LeetCodes刷题总结9——字符串解码

真的细!!!

weixin_53111016的博客 380
上一篇: LeetCode 270. Closest Binary Search Tree Value(二叉搜索树最接近值查找)
下一篇: LeetCode 272. Closest Binary Search Tree Value II(二叉搜索树查找)
jmspan
博客等级 码龄10年 99粉丝 431原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值