判断字符串是不是一个字符串的翻转

本文介绍了一种通过部分翻转字符串并比较其是否与另一个字符串相等的算法实现。该算法首先定义了字符串的整体翻转方法,然后通过查找特定字符来确定翻转的起始位置,最终判断两个字符串是否可以通过部分翻转达到一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法:
1、翻转字符串:首尾指针交换
2、部分翻转:两部分分别翻转,再整体翻转。共翻转三次得到部分翻转
3、本题就是找每一个位置进行部分翻转,检查是否是另一字符串的翻转。

class ReverseEqual {
public:
    string reverse(string str){
        if(str == "")
            return str;
        int start = 0;
        int end = str.size() - 1;
        while (start < end){
            char tmp = str[start];
            str[start] = str[end];
            str[end] = tmp;
            start ++;
            end --;
        }
        return str;
    }
    bool checkReverseEqual(string s1, string s2) {
        // 输入的字符串如果有空,那么必须都空才是反转字符串,否则不是
        if(s1 == "" || s2 == ""){
            return s1 == "" && s2 == "";
        }
        if(s1 == s2)
            return true;
        char first = s2[0];
        string part;
        string least = s1;
        for (int i = 0; i < s1.size(); ++i) {
            if(s1[i] == first){
                string swap_part = reverse(part);
                string swap_least = reverse(least);
                string now = swap_part + swap_least;
                now = reverse(now);
                if(now == s2)
                    return true;

            }
            part += s1[i];
            least.erase(0,1);
        }
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值