代码随想录算法训练营第八天| 344 反转字符串、541 反转字符串II

这两天开的是字符串专题,我准备在做题的时候用C++做一遍,再用C做一遍,因为一直刷leetcode用的都是C++,导致C的基础太薄弱了,之后工作中有可能用到C,相当于再复习复习

一、Leetcode 344 反转字符串

题目链接:Leetcode 344 反转字符串
这道题很简单,这才是真正的简单题

void reverseString(char* s, int sSize) {
    int left=0,right = sSize-1;
    while(left<right){
        char temp = s[left];
        s[left++] = s[right];
        s[right--] =temp;
    }
}

二、Leetcode 541 反转字符串II

题目链接:Leetcode 541 反转字符串II
这道题也是非常简单,要注意用C的时候strlen和sizeof的区别

char* reverseStr(char* s, int k) {
    int num = strlen(s);
    int left,right;
    for(int i=0;i<num;i+=(2*k)){
        if(i+k<=num){
            left = i;
            right = i+k-1;
        }else if(i+k>num){
            left = i;
            right = num-1;
        }
        while(left<right){
            char temp = s[left];
            s[left++] = s[right];
            s[right--] = temp;
        }
    }
    return s;
}

总结

在这里我对字符串和字符数组做个总结,假设我们有,char str1[] = "hello"和char* str2 = “hello”,这里要注意的是,str1的指向不能变,但是数组中的元素可以改变,因为他存储在栈上,str2的指向可以改变,但是因为存储的是字符串常量在rodata区域,所以字符串中的元素不能改变。此外sizeof(str1)是数组大小,为6,包含结束符’\0’,但是sizeof(str2)是指针大小,为4或者8,sizeof(*str1)和sizeof(*str2)都是1。访问这俩中的元素的方式都是一样的,str[i]即可访问。

你可能感兴趣的:(算法,数据结构,c++,c语言,leetcode)