字符串水题——从LeetCode题海中总结常见套路

字符串的题大部分都很水,但是一些企业机试经常出现(比如华为)

另外不水的题常常和DP/贪心/回溯连在一起比较难,还是多练吧

后面用Golang提交试试水,最近在学Golang,非常有意思

目录

LeetCode面试题58-II.左旋转字符串

LeetCode1108.IP地址无效化

LeetCode面试题01.06.字符串压缩

LeetCode657.机器人能否返回原点

LeetCode.804.唯一摩尔斯密码词

LeetCode709.转换成小写字母

LeetCode1221.分割平衡字符串


LeetCode面试题58-II.左旋转字符串

水题,溜了

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        string s1;
        for(int i=n;i<s.size();i++)
            s1.push_back(s[i]);
        for(int i=0;i<n;i++)
            s1.push_back(s[i]);
        return s1;
    }
};

LeetCode1108.IP地址无效化

咳咳咳,福利题

class Solution {
public:
    string defangIPaddr(string address) {
        string s;
        for(int i=0;i<address.size();i++){
            if(address[i]!='.')
                s.push_back(address[i]);
            else
                s.append("[.]");
        }
        return s;
    }
};

LeetCode面试题01.06.字符串压缩

一种笨拙的写法:

class Solution {
public:
    string compressString(string S) {
        string s;
        for(int i=0;i<S.size();i++){
            char a = S[i];
            int num = 1;
            if(a!=S[i+1]){
                s.push_back(a);
                s.append(to_string(num));
            }else{
                while(a==S[++i])
                    num++;
                s.push_back(a);
                s.append(to_string(num)); 
                i--;
            }
        }
        if(s.size()<S.size())
            return s;
        return S;
    }
};

LeetCode657.机器人能否返回原点

第一次用Golang提交,激动哈哈

func judgeCircle(moves string) bool {
    var x,y int;//golang会自动初始化为0
    for i:=0;i<len(moves);i++{
        if moves[i]=='R'{
            x++;
        }
        if moves[i]=='L'{
            x--;
        }
        if moves[i]=='U'{
            y++;
        }
        if moves[i]=='D'{
            y--;
        }
    }
    if x==0&&y==0{
        return true;
    }
    return false;
}

LeetCode.804.唯一摩尔斯密码词

用C++ set处理,挺快的

class Solution {
public:
    int uniqueMorseRepresentations(vector<string>& words) {
        string a[26]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        set<string> se;
        for(int i=0;i<words.size();i++){
            string s="";
            for(int j=0;j<words[i].size();j++){
                int n = words[i][j]-'a';
                s+=a[n];
            }
            se.insert(s);
        }
        return se.size();
    }
};

Golang用map也挺爽,就是还不太熟

func uniqueMorseRepresentations(words []string) int {
    a :=[]string {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}
    m := map[string]int{}
    for _,v := range words{
        str := ""
        for _,v1 := range v{
            str+=a[v1-'a']
        }
        m[str]=1
    }
    return len(m)
}

LeetCode709.转换成小写字母

一句Goland偷懒哈哈

Go语言的string模块包含了ToLower和ToUpper函数,用于将字符串转换成小写和大写

func toLowerCase(str string) string {
    return strings.ToLower(str)
}

LeetCode1221.分割平衡字符串

贪心即可

C++

class Solution {
public:
    int balancedStringSplit(string s) {
        int Rnum=0,Lnum=0;
        int num = 0;
        for(int i=0;i<s.size();i++){
            if(s[i]=='R')
                Rnum++;//记录R出现的次数
            else
                Lnum++;//记录L出现的次数
            if(Rnum!=0&&Lnum!=0&&Rnum==Lnum){//恰好分割时,归零并计数
                Rnum=Lnum=0;
                num++;
            }
        }
        return num;
    }
};

Golang

func balancedStringSplit(s string) int {
    Rnum := 0
    Lnum := 0
    num := 0
    for _,value := range s{
        if value=='R'{
            Rnum++
        }else{
            Lnum++
        }
        if Rnum!=0&&Lnum!=0&&Lnum==Rnum{
            Rnum=0
            Lnum=0
            num++
        }
    }
    return num
}

后记: 最开始写的时候是三月中下旬,然后咕咕咕咕到现在才搞出来,人类的本质是什么?哈哈哈哈

发布了377 篇原创文章 · 获赞 344 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/104891328