首页 > 学院 > 开发设计 > 正文

关于字符串旋转技巧编程题

2019-11-06 06:48:28
字体:
来源:转载
供稿:网友

1.输入一个英语句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student。”,则输出“student. a am I”。

算法思想:先翻转整个句子,然后,依次翻转每个单词。并依据空格来判断单词起始和终止的位置。

可执行代码:

public class Solution {    public String ReverseSentence(String str) {        char[] chars = str.toCharArray();        reverse(chars, 0, chars.length - 1);        int blank = -1;        for(int i = 0;i < chars.length;i++){            if(chars[i] == ' '){   //若句子中存在空格                int nextBlank = i;                reverse(chars,blank + 1,nextBlank - 1);                blank = nextBlank;            }        }        reverse(chars,blank + 1,chars.length - 1);   //句子中的最后一个单词进行翻转        return new String(chars); }    PRivate void reverse(char[] chars,int low,int high){        char temp;        while(low < high){            temp = chars[low];            chars[low] = chars[high];            chars[high] = temp;            low++;            high--;         }    }}2.举一反三:对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。

算法思想:把上述字符串看成两部分,前三个字符以及剩余的字符。首先,对前三个字符进行翻转;然后对剩余部分进行翻转;最后,对整个字符串进行翻转。

可执行代码:

public class Solution {    public String LeftRotateString(String str,int n) {        int len = str.length();        if(len == 0) return "";        n = n % len;        char[] chars = str.toCharArray();        reverse(chars,0,n - 1);        reverse(chars,n,chars.length - 1);        reverse(chars,0,chars.length - 1);        return new String(chars);    }    private void reverse(char[] chars,int low,int high){        char temp;        while(low < high){            temp = chars[low];            chars[low] = chars[high];            chars[high] = temp;            low++;            high--;        }    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表