LeetCode 最长公共前缀、Z字形变换

day2-1 No.14 最长公共前缀

暴力求解即可,我采用的是纵向比较法,时间复杂度:O(mn)。

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int len=strs.size();
        if(len==0)return "";
        string ans="";
        int MinStrLen=0x7fffffff;
        //找到最短的字符串长度
        for(int i=0;i<len;i++){
            if(strs[i].size()<MinStrLen){
                MinStrLen=strs[i].size();
            }
        }
        int j=0;//0-(MinStrLen-1)
        while(j<MinStrLen){
            char temp=strs[0][j];
            for(int i=0;i<len;i++){
                if(strs[i][j]!=temp){
                    return ans;
                }
            }
            ans+=temp;
            j++;
        }
        return ans;
    }
};

day2-2 No.6 Z字形变换(convert)

定义一个大小为numRows,元素为string类型的vector向量。然后按照题目给的画Z字的方法模拟,写出那样一个循环即可。相当于遍历字符串,按照画Z的顺序将各字符添加到对应向量的各元素中。最后要注意字符串下标溢出问题。

class Solution {
public:
    string convert(string s, int numRows) {
        vector<string> strs(numRows);//维度为numRows,元素为string
        int strlen=s.size();
        int j=0;
        while(j<strlen){
            for(int i=0;i<numRows&&s[j]!='\0';i++){
                strs[i]+=s[j];
                j++;
            }
            for(int i=numRows-2;i>=1&&s[j]!='\0';i--){
                strs[i]+=s[j];
                j++;
            }
        }
        string ans="";
        for(int i=0;i<numRows;i++){
            ans+=strs[i];
        }
        return ans;
    }
};
上一篇:leetcode刷题——Z字形变换


下一篇:《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。)