【算法】字符串问题——翻转字符串

    /**
     * 翻转字符串‘
     * 给定一个字符类型的数组chas,请在单词间作逆序调整。只要做到单词顺序逆序即可。
     * 例如,如果看成字符串"dog loves pig",则调整为"pig loves dog"
     * 过程:先整体逆序,在局部单词逆序
     */
    public static void rotateWord(char[] chas) {

        if (chas == null || chas.length <= 0) {
            return;
        }
        reverse(chas, 0, chas.length - 1);
        int l = -1;
        int r = -1;
        for (int i = 0; i < chas.length; i++) {
            if (chas[i] != ‘ ‘) {
                l = i == 0 || chas[i - 1] == ‘ ‘ ? i : l;
                r = i == chas.length - 1 || chas[i + 1] == ‘ ‘ ? i : r;
            }
            if (l != -1 && r != -1) {
                reverse(chas, l, r);
                l = -1;
                r = -1;
            }
        }
    }

    public static void reverse(char[] chas, int start, int end) {
        char tmp;
        while (start != end) {
            tmp = chas[start];
            chas[start] = chas[end];
            chas[end] = tmp;
            start++;
            end--;
        }
    }
 1 /**
 2      * 翻转字符串‘
 3      * 给定一个字符类型的数组chas,和一个整数size,请把大小为size的左半区整体移到右半区,右半区间整体移到左半区间
 4      * 例如,"ABCDE",size=3,调整为"DEABC"
 5      * 过程:先逆序前部分,在逆序后部分,最后逆序整体
 6      */
 7     public static void rotate1(char[] chas, int size) {
 8         if (chas == null || size <= 0 || size >= chas.length) {
 9             return;
10         }
11         reverse(chas, 0, size - 1);
12         reverse(chas, size, chas.length - 1);
13         reverse(chas, 0, chas.length - 1);
14     }
15
16     public static void reverse(char[] chas, int start, int end) {
17         char tmp;
18         while (start != end) {
19             tmp = chas[start];
20             chas[start] = chas[end];
21             chas[end] = tmp;
22             start++;
23             end--;
24         }
25     }
时间: 2024-10-12 17:34:19

【算法】字符串问题——翻转字符串的相关文章

python输入一个字符串,输出翻转后的字符串(翻转字符串)

题目:输出一个字符串,输出翻转后的字符串.例如:输入字符串a123,输出321a. 方法一:使用列表的reverse方法 1 string=input('请输入一个字符串:') 2 lst=list(string) #使用列表,将列表转化为字符串 3 lst.reverse() 4 print(''.join(lst)) 运行结果: 请输入一个字符串:abc123 321cba 方法二:切片法 1 def reverse(): 2 s=input("请输入一个字符串:") 3 retu

151 Reverse Words in a String 翻转字符串里的单词

给定一个字符串,翻转字符串中的每个单词.例如,给定 s = "the sky is blue",返回 "blue is sky the".对于C程序员:请尝试用O(1) 时间复杂度的原地解法.说明:    什么构成一个词?    一系列非空格字符组成一个词.    输入字符串是否可以包含前导或尾随空格?    是.但是,您的反转字符串不应包含前导或尾随空格.    两个单词之间多空格怎么样?    将它们缩小到反转字符串中的单个空格.详见:https://leetc

算法试题 - 翻转字符串

题目 题目:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”.是不是很简单?OK,搞定它 解析 思路一 切片 + 拼接 思路二 对原字符串进行扩充两倍,在这个基础上直接从要反转的地方取就可以,相当于前n个字符串翻转了,思想非常好 思路三 首先需要写一个reverse函数,把任何输入的字符

JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词

例如输入:I love programming 输出:I evol gnimmargorp 算法思路就是:根据空格提取每一个单词,存放在一个buffer里进行翻转处理,再添加到新的字符串.最后新的字符串就完成整个方法过程. public class ReserveString { public String reserve(String sentence){ String backS = new String(); StringBuffer temp = new StringBuffer();

翻转字符串和比较两个字符串是否相同

奉献两个小题,练习继续: //题目描述 // //请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). //给定一个string iniString,请返回一个string,为翻转后的字符串.保证字符串的长度小于等于5000. //测试样例: //"This is nowcoder" //返回:"redocwon si sihT" #include<iostream> #include<string

Reverse Words in a String(翻转字符串)

给定一个字符串,逐个翻转字符串中的每个单词. Given s = "the sky is blue",return "blue is sky the". 单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个 思路: 1.定义一个新的字符串str 接收原字符串删除首尾空字符后的字符串 trim(): 2.定义字符串tmp 存储遍历字符串时的每个单词:

[CareerCup] 1.2 Reverse String 翻转字符串

1.2 Implement a function void reverse(char *str) in C or C++ which reverses a null-terminated string. 这道题让我们用C++或C语言来翻转一个字符串,不算一道难题,在之前那道Reverse Words in a String 翻转字符串中的单词中用到了这个函数,跟那道题比起来,这题算简单的了.C语言的版本要比C++的稍微复杂一些,应为string类集成了很多有用的功能,比如得到字符串的长度,用下标

JAVA-从题目看算法,将输入字符串进行排序并输出

来看一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一个典型的可用递归算法来实现的例子,我们来看一下利用递归的2种不同解法. 1.典型递归元素交换的算法 (1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时. (2)算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素. package test; import java.uti

实现翻转字符串的方法,包含水平翻转(支持中文)

面试的时候或者实际业务操作时会有需要对字符串进行翻转的要求,如:abc,翻转后为:cba 等等. 在实现基本的翻转基础上再升级一下:增加对字符串做水平翻转,如: "你好啊, 今天去哪里 abc!", 则结果为 : "abc! 今天去哪里 你好啊," 1 /** 2 * 翻转字符串,如abc你好,则cba好你. --//支持中文, 3 * 4 * @param $str 需要翻转的字符串 5 * @param bool $word 是否要水平翻转,默认为否 6 * @