前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode两题选手】算法类题目(7.29)

【LeetCode两题选手】算法类题目(7.29)

作者头像
看、未来
发布2020-08-26 11:31:42
4340
发布2020-08-26 11:31:42
举报
文章被收录于专栏:CSDN搜“看,未来”

题一:翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。

代码语言:javascript
复制
示例 1:

输入: "the sky is blue"
输出: "blue is sky the"
代码语言:javascript
复制
示例 2:

输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
代码语言:javascript
复制
示例 3:

输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明:

代码语言:javascript
复制
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-words-in-a-string 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

有两个思路。

思路一:外部vector暂存

思路二:旋转vector法(原地)

心照不宣。

我一开始并没有想起来第二种方法,也是看了题解才想起来还有这么一招。

代码

代码一:

代码语言:javascript
复制
string reverseWords(string s){
    vector<string> vs; 
    string temp="";
    int i=0;
    while(s[i]!='\0'){               //遍历直到结尾 
        if (s[i]==' '){              //遇到空格
            if (!temp.empty())
                vs.push_back(temp); //单词放入容器中
            ++i;                    // 跳过空格 
            temp="";        }
        else{
            temp.push_back(s[i]);   //将字母加到temp字符串后面
            ++i;
        }
    }
    if (!temp.empty())
        vs.push_back(temp);       //将最后一个单词放入容器中

    int len=vs.size();            //倒序遍历容器
    string res="";
    for(int j=0;j<len;++j){
        res.append(vs[len-j-1]);
        if(j!=len-1)
            res.push_back(' ');
    }
    return res;
}

代码二:

先将整个字符串翻转,再对每个单词进行翻转。

代码语言:javascript
复制
class Solution {
public:
    string reverseWords(string s) {
        int len = s.size(), blank_num = 0, prune = (int) (s[0]==' ');
        char *tail = &s[len], *start = &s[0], *end = &s[0]-1;
        reverse(start, tail);
        while (true){
            while (++end<tail && *end == ' ')blank_num ++;
            while (++end<tail && *end != ' '){}
            reverse(start, end);
            if (end>=tail)return s.substr(0, len-blank_num-prune);
            start = end - blank_num + 1;
        }
    }
};

题二:简化路径

以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径

请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

代码语言:javascript
复制
示例 1:

输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。
代码语言:javascript
复制
示例 2:

输入:"/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
代码语言:javascript
复制
示例 3:

输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
代码语言:javascript
复制
示例 4:

输入:"/a/./b/../../c/"
输出:"/c"
代码语言:javascript
复制
示例 5:

输入:"/a/../../b/../c//.//"
输出:"/c"
代码语言:javascript
复制
示例 6:

输入:"/a//bc/d//././/.."
输出:"/a/b/c"

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/simplify-path 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

维护一个 vector 用以维护 实际路径

代码实现

代码语言:javascript
复制
	string simplifyPath(string path) {
        vector<string> str;
        stringstream ss(path);
        string sub;
        while(getline(ss,sub,'/'))
        {
            if(sub=="."||sub=="")
                continue;
            if(sub==".."&&str.size())
                str.pop_back();
            if(sub!="..")
                str.push_back(sub);
        }
        string res;
        for(string s:str)
            res+="/"+s;
        if(res.empty())
            res+="/";
        return res;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题一:翻转字符串里的单词
  • 思路
    • 思路一:外部vector暂存
      • 思路二:旋转vector法(原地)
      • 代码
        • 代码一:
          • 代码二:
          • 题二:简化路径
          • 思路
          • 代码实现
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档