翻转单词顺序&左旋转字符串

来源:互联网 发布:移动数据什么意思 编辑:程序博客网 时间:2024/05/21 09:14

一.翻转单词顺序

题目:

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

解题思路:

1.翻转句子中的所有字符
2.翻转每个单词中字符的顺序

java实现:

方法一:

public class Solution {    public String ReverseSentence(String str) {        if(str == null || str.length() <= 0 || str.trim().equals(""))            return str;        //翻转句子中的所有字符        str = reverseString(str, 0, str.length() - 1);        //翻转每个单词中字符的顺序        int i = 0;         int start = 0, end;        while(i < str.length()){            if(str.charAt(i) == ' '){                end = i - 1;                str = reverseString(str, start, end);                start = i + 1;            }            if(i == str.length() - 1){                str = reverseString(str, start, i);            }            i ++;        }        return str;    }    public String reverseString(String str, int start, int end){        char [] ch = str.toCharArray();        int i = start;        int j = end;        while(i < j){            char temp = ch[i];            ch[i] = ch[j];            ch[j] = temp;            i ++;            j --;        }        return String.valueOf(ch);    }}

方法二:用split()

public class Solution {    public String ReverseSentence(String str) {        if(str == null || str.length() <= 0 || str.trim().equals(""))   //注意比较字符串要用equals            return str;        String res = "";        String s1 = reverseString(str);        String [] s2 = s1.split(" ");        for(int i = 0; i < s2.length; i ++){            if(i == s2.length - 1)                res += reverseString(s2[i]);            else                res += reverseString(s2[i]) + " ";        }        return res;    }    public String reverseString(String str){        char [] ch = str.toCharArray();        int i = 0;        int j = ch.length - 1;        while(i < j){            char temp = ch[i];            ch[i] = ch[j];            ch[j] = temp;            i ++;            j --;        }        return String.valueOf(ch);    }}

二.左旋转字符串

题目:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作功能。比如输入字符串”abcdefg”和数字2,该函数将返回左旋转2位得到的结果”cdefgab”。

解题思路:

1.把字符串分成两部分,第一部分的长度为左旋转的位数,剩余的位第二部分
2.先分别翻转这两部分
3.翻转整个字符串

java实现:

方法一:

public class Solution {    public String LeftRotateString(String str,int n) {        if(str == null || str.length() <= 0 || n <= 0 || str.trim().equals(""))            return str;        str = reverseString(str, 0, n-1);//翻转第一部分        str = reverseString(str, n, str.length() - 1);//翻转第二部分        str = reverseString(str, 0, str.length() - 1);//翻转整个字符串        return str;    }    public String reverseString(String str, int start, int end){        int l = start, r = end;        char [] ch = str.toCharArray();        while(l < r){            char tmp = ch[l];            ch[l] = ch[r];            ch[r] = tmp;            l ++;            r --;        }        return String.valueOf(ch);    }}

方法二:利用substring(0,n)

public class Solution {    public String LeftRotateString(String str,int n) {        if(str == null || str.length() <= n)            return str;        String s = "";        String s1 = str.substring(0,n);        String s2 = str.substring(n,str.length());        s = s2 + s1;        return s;    }}
阅读全文
0 0
原创粉丝点击