校招准备系列:每天一道算法题(11)-替换空格

替换空格

此题来自 剑指offer

题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

最简单的方法:利用java自带的 replace 方法:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        String str1 = str.toString();
        String str2 = str1.replace(" ","%20");
        return str2;
    }
}

另外一种解法 从后往前依次替换:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int count = 0;
        for(int i = 0;i<str.length();i++){
            if(str.charAt(i) == ' '){
                count++;
            }
        }
        int len = str.length();
        int newLen = str.length()+count*2;
        char[] rs = new char[newLen];
        for(int i = len-1;i>=0;i--){
            if(str.charAt(i) == ' '){
                rs[newLen-1]='0';
                rs[newLen-2]='2';
                rs[newLen-3]='%';
                newLen = newLen-3;
            }else{
                rs[newLen-1]=str.charAt(i);
                newLen--;
            }
        }
        return new String(rs);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 算法7-10和7-11是关于图中关节点和重连通分量的算法。 关节点是指在一个无向连通图中,如果删除该节点后,图不再连通,则该节点被称为关节点。算法7-10是用Tarjan算法来寻找图中的所有关节点。 重连通分量是指在一个有向图中,如果两个节点之间存在双向路径,则这两个节点属于同一个重连通分量。算法7-11是用Kosaraju算法来寻找图中的所有重连通分量。 这两个算法都是图论中比较经典的算法,对于理解图的连通性和结构有很大的帮助。 ### 回答2: 算法7-10用于寻找无向图中的关节点。关节点是指在删除这些节点后,原始图会被分割成多个不连通的子图。该算法的思想是通过深度优先搜索来遍历图中的每个节点,并记录每个节点的遍历次序(时间戳)和每个节点所能达到的最小的时间戳。 具体步骤如下: 1. 对于每个节点,初始化它的访问状态为未访问。 2. 对于每个节点,调用DFS函数进行深度优先搜索。 3. 在DFS函数中,记录当前节点的访问时间戳,并将其置为已访问状态。 4. 遍历当前节点的所有相邻节点,对于未访问的相邻节点,调用DFS函数进行遍历。 5. 对于已访问的相邻节点,更新当前节点所能达到的最小时间戳。 6. 若当前节点是根节点且有超过一个子节点,则当前节点为关节点。 7. 若当前节点不是根节点且当前节点所能达到的最小时间戳大于等于当前节点的访问时间戳,则当前节点为关节点。 算法7-11用于寻找无向图中的重连通分量。重连通分量是指图中的一些节点,其中的每两个节点都有一条路径相连,且不能再添加其他节点,否则就会不满足这个性质。该算法的思想是利用算法7-10找到图中的关节点,然后通过关节点将图划分为多个重连通分量。 具体步骤如下: 1. 使用算法7-10找到无向图中的关节点。 2. 通过关节点将图中的边删除,形成多个子图。 3. 对于子图中的每个节点,进行深度优先搜索,并记录该子图的所有节点。 4. 将每个子图的节点集合作为一个重连通分量。 综上所述,算法7-10用于寻找无向图中的关节点,算法7-11用于基于关节点寻找图中的重连通分量。 ### 回答3: 算法7-10是用来查找无向图中的关节点的算法,关节点也被称为割点。关节点是指在移除该节点(及其相关边)后,原图会被分割成两个或更多的连通分量。 算法7-10的实现思路如下: 1. 遍历图中的每个节点,作为当前要判断的节点。 2. 标记当前节点为已访问。 3. 对于当前节点的每个邻居节点,如果邻居节点未被访问过,则进行递归调用,继续判断邻居节点的邻居节点能否通过其他路径到达当前节点之前的节点。 4. 如果邻居节点无法通过其他路径到达当前节点之前的节点,则当前节点为关节点。 5. 继续遍历下一个未访问的节点,重复上述步骤。 6. 最后输出所有的关节点。 算法7-11是用来查找有向图中的强连通分量的算法。强连通分量是指在有向图中,任意两个节点之间都存在互相可达的路径。 算法7-11的实现思路如下: 1. 对图进行深度优先搜索,并记录遍历到的节点的顺序。 2. 对图进行反向,即将所有的边的方向反过来。 3. 根据第一步遍历到的节点顺序,逆序进行深度优先搜索,并记录每个搜索得到的连通分量。 4. 最后输出所有的强连通分量。 关节点和重连通分量在图论中起到了重要的作用。它们可以帮助我们发现网络中的脆弱点和强壮性区域,对于网络可靠性的分析和改进具有重要的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值