算法分析-如何实现字符串的反转

问题:将一个句子中的单词进行反转,例如:“how are you”,进行反转后的结果为“you are how”。
解题思路:将这个句子进行两次反转操作即可。

1)对整个字符串进行字符反转,反转结果“uoy era woh”;
2)接下来对每个单词进行字符反转,结果就是“you are how”。

源代码:

/*
 问题:将一个句子中的单词进行反转,例如:“how are you”,进行反转后的结果为“you are how”。
 解题思路:将这个句子进行两次反转操作即可。
 1)对整个字符串进行字符反转,反转结果“uoy era woh”;
 2)接下来对每个单词进行字符反转,结果就是“you are how”。
*/
public class SwapString{
    public  void swap(char []cArr , int front , int end){
        while(front<end){
            char tmp = cArr[end];
            cArr[end] = cArr[front];
            cArr[front] = tmp;
            front++;
            end--;
        }
    }

    public String swapWrods(String s){
        char []cArr = s.toCharArray();
        //对整个字符串进行字符反转操作
        swap(cArr,0,cArr.length - 1);
        int begin = 0 ;
        //对每个单词进行字符反转操作
        for(int i = 1; i<cArr.length;i++){
            if(cArr[i] ==' '){
                swap(cArr,begin,i-1);
                begin = i+1;
            }
        }
        //处理最后一个单词
        swap(cArr, begin, cArr.length-1);
        return new String(cArr);
    }
    public static void main(String []args){
        String str = "how are you";
        System.out.println(new SwapString().swapWrods(str));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构算法分析-C语言描述(原书第二版)是一本经典的计算机科学教材,它涵盖了数据结构算法的基本概念和实现方法。下面是第五章的练习题答案: 1. 编一个递归算法,计算一个整数n的阶乘。 ```c #include <stdio.h> int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n-1); } } int main() { int n = 5; printf("Factorial of %d is %d\n", n, factorial(n)); return 0; } ``` 2. 编一个递归算法,输出一个整数n的二进制表示。 ```c #include <stdio.h> void decimalToBinary(int n) { if (n > 0) { decimalToBinary(n / 2); printf("%d", n % 2); } } int main() { int n = 10; printf("Decimal %d is binary ", n); decimalToBinary(n); printf("\n"); return 0; } ``` 3. 编一个非递归算法,求一个数组的最大值。 ```c #include <stdio.h> int findMax(int arr[], int size) { int max = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] > max) { max = arr[i]; } } return max; } int main() { int arr[] = {2, 8, 4, 1, 6}; int size = sizeof(arr) / sizeof(arr[0]); printf("The maximum value in the array is %d\n", findMax(arr, size)); return 0; } ``` 4. 编一个非递归算法,将一个字符串进行反转。 ```c #include <stdio.h> #include <string.h> void reverseString(char str[]) { int len = strlen(str); for (int i = 0, j = len - 1; i < len / 2; i++, j--) { char temp = str[i]; str[i] = str[j]; str[j] = temp; } } int main() { char str[] = "Hello World"; printf("Original string: %s\n", str); reverseString(str); printf("Reversed string: %s\n", str); return 0; } ``` 以上是第五章的练习题答案,希望对您有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值