手摇算法

本文介绍了手摇算法,一种形象化的算法描述,主要用于字符串翻转和原地归并操作。在字符串翻转中,算法可以处理包含多个空格的情况,将i come from china.翻转为china. come from i。而在原地归并的应用中,提供了相关链接进一步探讨详细实现。

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

一,算法描述

f为翻转映射
1. 假设AB要翻转成BA,

f(f(A)f(B))=f(f(B))f(f(A))=BA

2. 假设ABC要翻转成CBA,f为翻转映射

f【f(A)f(B)f(C)】=f(f(C))f(f(B))f(f(A))=CBA

还是觉得叫翻手掌算法比较形象……
跟着我左手右手一个慢动作
这里写图片描述
各自180°翻转
这里写图片描述
右手左手慢动作重播
整体180°翻转
这里写图片描述

二,算法应用

1. 翻转字符串

i come from china.反转成china. come from i
中间可能有多个空格

 private  static String reverseString1(String string) {
    if (string==null||string.length()==0){
        return string;
    }
    char[] array=string.toCharArray();
    int start=0;
    int end=array.length-1;
    while (array[start]!=' '){
        start++;
    }
    while (array[end]!=' '){
        end--;
    }
    //[0,start-1]之间的元素是第一个单词,[end+1,array.length-1]是第二个单词
    //现在的结构是ABC,需要变成CBA,定义f为翻转映射,f【f(A)f(B)f(C)】=f(f(C))f(f(B))f(f(A))=CBA
    reverse(array,0,start-1);
    reverse(array,start,end);
    reverse(array,end+1,array.length-1);
    reverse(array,0,array.length-1);
    return String.valueOf(array);
}

public  static void reverse(char[] array,int start,int end){
    while (start<=end){
        swap(array,start++,end--);
    }
}

private static void swap(char[] array, int i, int j) {
    char temp=array[i];
    array[i]=array[j];
    array[j]=temp;
}

2. 原地归并

http://blog.csdn.net/shuxiangxingkong/article/details/17614195

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值