carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode796:旋转字符串(rotate-string) #132

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。

s 的 旋转操作 就是将 s 最左边的字符移动到最右边。 

例如, 若 s = 'abcde',在旋转一次之后结果就是'bcdea' 。  

示例 1:

输入: s = "abcde", goal = "cdeab" 输出: true 示例 2:

输入: s = "abcde", goal = "abced" 输出: false  

提示:

1 <= s.length, goal.length <= 100 s 和 goal 由小写英文字母组成

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/rotate-string

carloscn commented 1 year ago

问题分析

C 语言版本

static int32_t is_totate_string(const char *str_a, const char *str_b, bool *result)
{
    int32_t ret = 0;
    size_t a_len, b_len;
    char *joint_str = NULL;

    UTILS_CHECK_PTR(str_a);
    UTILS_CHECK_PTR(str_b);
    UTILS_CHECK_PTR(result);
    UTILS_CHECK_LEN(a_len = strlen(str_a));
    UTILS_CHECK_LEN(b_len = strlen(str_b));

    joint_str = (char *)calloc(sizeof(char), a_len + a_len + 1);
    UTILS_CHECK_PTR(joint_str);

    strcat(joint_str, str_a);
    strcat(joint_str, str_a);

    *result = strstr(joint_str, str_b) != NULL;

finish:
    UTILS_SAFE_FREE(joint_str);
    return ret;
}

RUST 版本


fn is_rotate_string(str_a:&String, str_b:&String) -> Result<bool, &'static str>
{
    let mut ret:bool = false;
    let mut joint_str:String = String::new();

    if (0 == str_a.len()) ||
       (0 == str_b.len()) {
        return Err("len error!\n");
    }

    joint_str = format!("{}{}", *str_a, *str_a);
    ret = joint_str.contains(str_b);

    return Ok(ret);
}
carloscn commented 1 year ago

code

https://github.com/carloscn/structstudy/blob/master/c_programming/str/n43_rotate_string_796.c https://github.com/carloscn/structstudy/blob/master/rust_programming/str/src/n43_rotate_string_796.rs