字符串翻转

字符串翻转

对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。

输入描述:
给定一个字符串s以及它的长度n(1≤n≤500)
输出描述:
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。
输入例子:
"This is a sample",16
输出例子:
"SAMPLE A IS tHIS"解题

1.首先整体字符串翻转2.大小写翻转3.以空格为间隔划分的子字符串翻转
import java.util.*;

public class Transform {
    public String trans(String s, int n) {
        // write code here
        char[] chArr = s.toCharArray();
        change(chArr);
        reverse(chArr,0,chArr.length - 1);
        int i = 0;
        int j = 0;
        while(j<chArr.length && chArr[j] == ‘ ‘)
            j++;
        while( i < chArr.length ){

            if(chArr[i] == ‘ ‘){
                int tmpi = i;
                reverse(chArr,j,tmpi-1);
                while(i< chArr.length && chArr[i] == ‘ ‘)
                    i++;
                j = i;
            }else
                i++;
        }
        if(j <i)
            reverse(chArr,j,i-1);
        return String.valueOf(chArr);
    }
    public void change(char[] chArr){
        for(int i = 0;i< chArr.length;i++){
            if(isLowerCase( chArr[i])){
                chArr[i]= (char) (chArr[i] - ‘a‘ + ‘A‘);
            }else if(isUpperCase(chArr[i])){
                chArr[i] = (char) (chArr[i] - ‘A‘ + ‘a‘);
            }
        }
    }
    public void reverse(char[] chArr,int low ,int high){
        while(low < high){
            char tmp = chArr[low];
            chArr[low] = chArr[high];
            chArr[high] = tmp;
            low++;
            high--;
        }
    }
    public boolean isUpperCase(char ch){
        if(‘A‘ <= ch && ch<= ‘Z‘)
            return true;
        return false;
    }
    public boolean isLowerCase(char ch){
        if( ‘a‘ <= ch && ch<= ‘z‘)
            return true;
        return false;
    }
}
时间: 2024-08-09 02:06:04

字符串翻转的相关文章

字符串翻转,单词内不翻转

字符串翻转,单词内不翻转.如I am from Chongqing->Chongqing from am I 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 void reverse(char *str, int beg, int end); 6 void reverseSentece(char *str); 7 int main() 8 { 9 char str[128]; 10

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

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

c/c++面试题(4)字符串翻转/打印任意进制格式/类型转换

1.字符串的翻转,这里一般是字符数组.不包括字符串字面值. char* reversal_str(char* str,size_t size); 翻转之后的字符串是原来的字符串的翻转. #include <stdio.h> #include <string.h> char* reversal(char* str,size_t len) { if(str != NULL) { char* start = str; char* end = str + len - 1; char ch;

CareerCup之1.2C风格字符串翻转

[题目] 原文: Write code to reverse a C-Style String. (C-String means that "abcd" is represented as five characters, including the null character.) 译文: 写代码翻转一个C风格的字符串.(C风格的意思是"abcd"需要用5个字符来表示,包含末尾的 结束字符) [分析] 这是一道经典的面试题目,虽然看似简单,但仍然有陷阱.唯一的陷阱

C字符串翻转

实现字符串翻转,思路很简单,就是首尾字符对调. void reverse(char* str){ char* p = str + strlen(str) - 1;//最后一个字符地址 char temp; while (str<p) { temp = *p;//获取p指向字符串 *p-- = *str;//p 往左边移动,设置值为*str *str++ = temp; } } 注意str<p 这里,代表指针变量的大小,因为同一个字符串的地址,str指向首字母的指针变量的值,p是指向末尾字符的指

字符串翻转-不能使用系统函数

思想 定义头尾两个指针 交换头尾指针的数据 //字符串翻转 char *strrev(char *str){ //判断字符是否为null或是空字符串 if(str == NULL || str == '\0') { return str; } //定义char数组指针 char *start = str; char *end = str; while(*end != '\0'){ //指向最后一个结点 end ++; } //交换头和尾的值 char temp; --end; //去除\0的位置

php 中文字符串翻转

php 自带的字符串翻转函数 strrev() 只支持英文,不支持中文,在网上找到了一个方法,支持中英文: <?php function reverse($str, $encode = 'UTF-8') {     $n = mb_strlen($str, $encode);     $new_str = "";     for ($i = $n; $i >= 0; $i--) {         $new_str .= mb_substr($str, $i, 1, $en

[字符串]翻转其中的所有单词

其实翻转字符串能够通过多次的字符串的逆序实现,这里主要学习一下,怎么提取每一个英语单词,然后分别对其逆序. string ReverseSentence(string str) { int size = str.size(); char *pFirst = &str[0]; char *pEnd = &str[size - 1]; Reverse(pFirst, pEnd); pFirst = &str[0]; pEnd = pFirst; while(*pFirst != '\0

字符串翻转和左旋

问题一:将字符串“abcde”翻转成“edcba”;用start表示字符串的首地址,end表示字符串的最后一个字符的指针. void reverse(char* start,char *end) { if(start==NULL||end==NULL) return ; while(start<end) { char temp=*start; *start=*end; *end=temp; start++; end--; } } 问题二:将字符串“I am a student.”翻转,但是每个单