(c字符串处理)剑指 Offer 58 - II. 左旋转字符串

字符串 尽量先不用string

	// 字符串长度
	int len = strlen(s),i = 0;
	// 定义一个字符串
	// 注意长度 要len+1 最后留一个'\n'
    char *ans = NULL; 
    ans = (char*)malloc(sizeof(char) * (len + 1));

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

c语言题解:

要注意的事情

  • 1 ans++ 指针要后移
  • 2 最后要 ans= '\0';
  • 3 return ans - len最后指指到最前面一位
  • 4 这一题用char[]时候,会错误,因为定义char ans[len]时候,len会太大而出现各种错误
    c语言char*写法
char* reverseLeftWords(char* s, int n){
    // for(int i = 0; i < len; i++){

    // }
    int len = strlen(s),i = 0;
    char *ans = NULL; 
    ans = (char*)malloc(sizeof(char) * (len + 1));

    for(int i = n;i < len; i++){
        *(ans++) = s[i];
    }
    for(int i = 0;i < n;i++){
        *(ans++) = s[i];
    }
    *ans= '\0';
    return ans - len;
}

cpp写法

翻转法(抄别人的)

string reverseLeftWords(string s, int n) {
        if (n >= s.length() || s.length() < 2 || n == 0) {
            return s;
        }

        reverse(s, n, s.length() - 1); // 翻转 s2 部分
        reverse(s, 0, s.length() - 1); // 翻转整个字符串 s
        reverse(s, s.length() - n, s.length() - 1); // 翻转 s1 部分

        return s;
    }

    void reverse(string& s, int start, int end) {
        if (end >= s.length() || end - start < 1) {
            return;
        }
        while (start < end) {
            char temp = s[start];
            s[start] = s[end];
            s[end] = temp;
            start++; end--;
        }
    }
上一篇:剑指 Offer 58 - II. 左旋转字符串


下一篇:加班