java数据结构之字符串

字符串

反转字符串

在这里插入图片描述

class Solution {
    public void reverseString(char[] s) {
    int n =s.length;
    for( int left=0,right=n-1;left<right;left++,right--){
        char temp = s[right];
        s[right]=s[left];
        s[left]=temp;
    }
    }
}

反转字符串2

在这里插入图片描述

class Solution {
    public String reverseStr(String s, int k) {
        char[] a = s.toCharArray();
        for (int start = 0; start < a.length; start += 2 * k) {
            int i = start, j = Math.min(start + k - 1, a.length - 1);
            while (i < j) {
                char tmp = a[i];
                a[i++] = a[j];
                a[j--] = tmp;
            }
        }
        return new String(a);
    }
}

反转字符串里的单词

在这里插入图片描述

class Solution {
    public String reverseWords(String s) {
        char[] ss = s.toCharArray();
        int n = s.length();
        // 翻转整个字符串
        reverse(ss,0,n-1);
        //reWord(ss,n);
        // 翻转单词
        word_reverse(ss,n);
        // 删除多余的空格
        return delek(ss,n);

    }

    // 反转整个字符串
    public void reverse(char[] ss,int i ,int j){
        while(i<j){
            char tem = ss[i];
            ss[i++]=ss[j];
            ss[j--]=tem;
        }
    }

    // 反转单个的字符串
    // public void reWord(char[] c,int n){
    //     int j =0;
    //     int i =0;
    //     while(j<n){
    //         while(i<n && c[i]==' ') i++; // 寻找不是空字符的第一个字符  首位置
    //         j=i;      
    //         while(j<n && c[j]!=' ') j++; // 寻找当前单词的最后一个字符 末位置
    //         reverse(c,i,j-1); // 纠正单个单词
    //         i=j;
    //     }
    // }
    private void word_reverse(char[] s_arr, int n) {
        int i = 0;
        int j = 0;
        while (j < n) {
            // 找到第一个首字母
            while (i < n && s_arr[i] == ' ') i++;
            j = i;
            // 末位置
            while (j < n && s_arr[j] != ' ') j++;
            reverse(s_arr, i, j - 1);
            i = j;
        }
    }

    // 去除空格
    public String delek(char[] c , int n){
        int i = 0;
        int j = 0;
        while(j<n){
            while(j<n && c[j]==' ') j++; // 寻找不是空字符的第一个字符
            while(j<n && c[j]!=' ') c[i++]=c[j++]; // 第一个字符与第一个不是空的字符进行覆盖
            while(j<n && c[j]==' ') j++; // 寻找下一个不是空字符的字符
            if(j<n) c[i++]=' ';// 赋值一个空格 将上一个单词与下一个单词隔开
        }
        return new String(c).substring(0,i);
    }
}

左旋转字符串

在这里插入图片描述

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder res = new StringBuilder();
        for(int i = n; i < s.length(); i++)
            res.append(s.charAt(i));
        for(int i = 0; i < n; i++)
            res.append(s.charAt(i));
        return res.toString();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值