【第4期】前端算法精选-字符串

简介: 【第4期】前端算法精选-字符串

复原IP地址


LeetCode.93,难度中等

题目

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

示例:

输入: "25525511135"

输出: ["255.255.11.135", "255.255.111.35"]


思路


对于IP地址来说,要注意的点是,地址分为4段,每一段不能大于255,且每一段如果开头是0的话那只能有一位。

考虑可以用回溯的思路,比如第一段可以在2、25、255里面选,当第一段是2的时候,第二段可以在5、55、552(超过255不符合要求)里选,第二段是5的时候,第三段可以在5、52、525(超过255不符合要求)里选,第三段是5的时候,第四段可以在2、25、255里选,其他情况可以以此类推。

代码如下:

/**
 * @param {string} s
 * @return {string[]}
 */
const restoreIpAddresses = function(s) {
    let res = [];
    backtrack(0, '', s, 4, res);
    return res;
};
/*
    pos:当前遍历到的位置
    ip:当前构造出的ip
    s:字符串
    flag:当前是在处理第几段,ip地址共4端
*/
const backtrack = function(pos, ip, s, flag, res) {
    if(flag < 0)
        return;
    if(pos === s.length && flag === 0) {
        res.push(ip.substring(0, ip.length-1));
        return;
    }
    for(let index = pos; index < pos+3;index++) {
        // 0只能作为IP中的一段,不能出现xx.01.xx.xx这样的,所以break
        if(index === pos && s[index] === '0') {
            backtrack(index + 1, ip + '0.', s, flag-1, res);
            break;
        }
        if(parseInt(s.substring(pos, index+1)) <= 255) {
            backtrack(index+1, ip + s.substring(pos, index+1) + '.', s, flag-1, res);
        }
    }
}
复制代码


二进制求和


LeetCode.67,难度简单,常见于腾讯面试


题目


给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"

输出: "100"

示例 2:

输入: a = "1010", b = "1011"

输出: "10101"


思路


依然是个字符串按位相加的例子,不过要注意二进制的加法进位逻辑和两个字符串不一定会一样长。

代码如下:

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function(a, b) {
    if(a === "")
        return b;
    if(b === "")
        return a;
    let index1 = a.length-1;
    let index2 = b.length-1;
    let res = "";
    let carry = false;  // 进位
    while(index1 >= 0 && index2 >= 0) {
        let cur = "0";
        if(a[index1] === "1" && b[index2] === "1") {
            if(carry) {
                cur = "1";
            } else {
                cur ="0";
            }
            carry = true;
        } else if (a[index1] === "1" || b[index2] === "1") {
            if(carry) {
                cur = "0";
                carry = true;
            } else {
                cur = "1";
            }
        } else {
            if(carry) {
                cur = "1";
                carry = false;
            } else {
                cur = "0";
            }
        }
        index1--;
        index2--;
        res = cur + res;
    }
    let index = index1 >= 0 ? index1 : index2;
    let num = index1 >= 0 ? a : b;
    while(index >= 0) {
        let cur = "";
        if(num[index] === "1") {
            if(carry) {
                cur = "0";
                carry = true;
            } else {
                cur = "1";
                carry = false;
            }
        } else {
            cur = carry ? "1" : "0";
            carry = false;
        }
        index--;
        res = cur + res;
    }
    if(carry) {
        res = "1" + res;
    }
    return res;
};


相关文章
|
11天前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
5天前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
6天前
|
前端开发 JavaScript Java
【前端学java】详解java中的字符串操作(11)
【8月更文挑战第10天】详解java中的字符串操作
9 3
【前端学java】详解java中的字符串操作(11)
|
12天前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
3天前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
12天前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
1月前
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
205 1
|
1月前
|
数据采集 算法 JavaScript
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
JavaScript字符串搜索涵盖`indexOf`、`includes`及KMP算法。`indexOf`返回子字符串位置,`includes`检查是否包含子字符串。KMP是高效的搜索算法,尤其适合长模式匹配。示例展示了如何在数据采集(如网页爬虫)中使用这些方法,结合代理IP进行安全搜索。代码示例中,搜索百度新闻结果并检测是否含有特定字符串。学习这些技术能提升编程效率和性能。
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
|
15天前
|
算法 C++
惊爆!KPM算法背后的秘密武器:一行代码揭秘字符串最小周期的终极奥义,让你秒变编程界周期大师!
【8月更文挑战第4天】字符串最小周期问题旨在找出字符串中最短重复子串的长度。KPM(实为KMP,Knuth-Morris-Pratt)算法,虽主要用于字符串匹配,但其生成的前缀函数(next数组)也可用于求解最小周期。核心思想是构建LPS数组,记录模式串中每个位置的最长相等前后缀长度。对于长度为n的字符串S,其最小周期T可通过公式ans = n - LPS[n-1]求得。通过分析周期字符串的特性,可证明该方法的有效性。提供的C++示例代码展示了如何计算给定字符串的最小周期,体现了KPM算法在解决此类问题上的高效性。
26 0
|
1月前
|
算法 Java
KMP算法详解及其在字符串匹配中的应用
KMP算法详解及其在字符串匹配中的应用