代码随想录刷题训练营Day8|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

文章目录

  • 一、344. 反转字符串
  • 二、反转字符串Ⅱ
  • 三、剑指offer 05. 替换空格
  • 四、151. 翻转字符串里的单词
  • 五、151. 翻转字符串里的单词剑指Offer58-II.左旋转字符串


一、344. 反转字符串

注意:char[ ]数组,我们调用长度的时候只能用'c.length()'方法,因为这个是数组的长度;
size()方法是针对集合使用的,如Set,List,Map。

代码如下:

class Solution {
    public void reverseString(char[] s) {
        int left =0;
        int right=s.length-1;
        char tmp;
        for(int i =0; i< s.length/2; i++){
            tmp =s[right];
            s[right]=s[left];
            s[left]=tmp;
            left++;
            right--;
        }
    }
}

二、反转字符串Ⅱ

  1. 注意:
    字符串转字符数组
String str;
char[] ch = str.toCharArray();

  1. 字符数组转字符串
char[]  ch ={'a', 'b', 'c'};
 String s = new String(ch );

  1. 题目描述:
    给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

    如果剩余字符少于 k 个,则将剩余字符全部反转。
    如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        for(int i=0;i<ch.length;i+=2*k){
            if(i+k<=ch.length){
                reverse(ch,i,i+k-1);
                continue;
            }
            reverse(ch, i, ch.length - 1);
        }
        return new String(ch);

    }
    public void reverse(char[] c, int i, int j){
        char tmp;
        for(; i<j;i++,j--){
            tmp=c[j];
            c[j]=c[i];
            c[i]=tmp;
        }
    }
}

三、剑指offer 05. 替换空格

1. StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,
这里的可变指的是 StringBuilder 对象中的内容是可变的;
2. 构造函数:
public StringBuilder(), 创建一个空白可变字符串对象;
public StringBuilder(String s), 根据字符串创建可变字符串对象。
3. 方法:
pulbic StringBuilder append(): 添加数据并返回对象本身
public StringBuilder reverse(): 返回相反的字符序列

注意:.length和.length()的区别
1.length属性是针对Java中的数组来说的,要求数组的长度可以用其length属性;
2.length()方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法;

class Solution {
    public String replaceSpace(String s) {
        if(s==null){
            return null;
        }
        StringBuilder sb= new StringBuilder();
        for(int i =0; i<s.length();i++){
            // 对于字符串的长度需要引用.length()方法,数组可以直接引用.length属性
            if(s.charAt(i)==' '){ 
                // 比较字符要用单引号
                sb.append("%20");
            }else{
                sb.append(s.charAt(i));
                // 注意.charAt()是方法要用()
            }
        }
        return sb.toString();

    }
}

四、151. 翻转字符串里的单词

  1. 思路

  1. 代码
class Solution {
    public String reverseWords(String s) {
        StringBuilder sb = removeSpace(s);
        reverseString(sb,0,sb.length()-1);
        reverseEachWords(sb);
        return sb.toString();
    }
        
        public StringBuilder removeSpace(String s){
            int start = 0;
            int end = s.length()-1;
            while(s.charAt(start)==' ')start++;
            while(s.charAt(end)==' ')end--;
            StringBuilder sb = new StringBuilder();
            
            while(start<=end){
                char c =s.charAt(start);
                if(c!=' ' || sb.charAt(sb.length()-1)!=' '){
                    sb.append(c);
                }
                start++;
            }
            return sb;
        }
        public void reverseString(StringBuilder sb, int start, int end){
            while(start<end){
                char tmp=sb.charAt(start);
                sb.setCharAt(start,sb.charAt(end));
                sb.setCharAt(end,tmp);
                end--;
                start++;

            }
        }
        private void reverseEachWords(StringBuilder sb){
            int start = 0;
            int end = 1;
            int n = sb.length();
            while (start < n) {
                while (end < n && sb.charAt(end) != ' ') {
                end++;
                }
                reverseString(sb, start, end - 1);
                start = end + 1;
                end = start + 1;
            }
        }
}

五、151. 翻转字符串里的单词剑指Offer58-II.左旋转字符串

  1. 思路和之前翻转题目一致

  1. 代码:
class Solution {
    public String reverseLeftWords(String s, int n) {
        int len=s.length();
        StringBuilder sb=new StringBuilder(s);
        reverseString(sb,0,n-1);
        reverseString(sb,n,len-1);
        return sb.reverse().toString();
    }
     public void reverseString(StringBuilder sb, int start, int end) {
        while (start < end) {
            char temp = sb.charAt(start);
            sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end, temp);
            start++;
            end--;
            }
        }
}

你可能感兴趣的:(算法,数据结构)