5.17字符串(151. 颠倒字符串中的单词,剑指 Offer 58 - II. 左旋转字符串,14. 最长公共前缀)

leecode151. 颠倒字符串中的单词

在这里插入图片描述
这个题目我第一反应就是用堆和栈来做,因为反转的东西都可以用堆栈来做。

class Solution {
public:
    string reverseWords(string s) {
        stack<string> st;
        string dstStr;
        char* tmpStr = strtok(s.data(), " ");
        while(tmpStr != NULL){
            st.push(tmpStr);
            tmpStr = strtok(NULL," ");
            
        }
        string ans;
        while(!st.empty()){
            ans += st.top();
            ans +=" ";
            st.pop();  
       }
        ans = ans.substr(0,ans.size()-1);

       return ans;

    }
};

代码简介高效,当然代码随想录也介绍了一种比较不错想法,虽然快而且易懂,但是我觉得这个想法的代码有点复杂。大家也可以看看。
代码随想录

剑指 Offer 58 - II. 左旋转字符串

在这里插入图片描述
这道题也是参考代码随想录的方法来刷的,而且算法复杂度为n,利用的额外空间为0.并且最主要的是,代码非常简介。代码随想录

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        reverse(s.begin(), s.begin()+n);
        reverse(s.begin()+n,s.end());
        reverse(s.begin(), s.end());

        return s;
    }
};

leecode14. 最长公共前缀

在这里插入图片描述
此题最开始的写法也是用暴力写法写,但是如果单词很多的话,算法复杂度会飙升。所以我看了评论区,觉得有一个方法非常简单,而且好理解。
1.先把所有元素按照字典顺序排序。
2.比较容器中的第一个元素和最后一个元素
3.这样便可以得到最长公共前缀,为什么呢,因为当字符按照字典排序过后,如果第一个和最后一个字符串的第一个字母相同,那就证明中间的所有字符串的第一个字母与他都是相同的,此解法甚为精妙

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        sort(strs.begin(), strs.end());
        string s1 = strs.front();
        string s2 = strs.back();
        int i = 0;
        string s = "";
        int count = 0;
        while(i < s1.size() && i < s2.size() && s1[i] == s2[i]){
            count++;
            i++;
        }

        return s1.substr(0,count);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值