Java题解 | #字符串变形# 字符串数组原地修改

字符串变形

https://www.nowcoder.com/practice/c3120c1c1bc44ad986259c0cf0f0b80e

import java.util.*;

public class Solution {
    // 字符串数组翻转函数
    public void reverseArr(char[] arr, int i, int j) {
        // 双指针左右滑动
        int left = i;
        int right = j;
        while(left<right) {
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }
    
    public String trans(String s, int n) {
        // 字符串数组原地修改
        char[] str = s.toCharArray();
        // 遍历更新:大写变小写、小写变大写、空值则不做处理
        for(int i=0; i<n; i++) {
            char element = str[i];
            if(element>='A' && element<='Z') str[i] = (char)(element-'A'+'a');
            else if(element>='a' && element<='z') str[i] = (char)(element-'a'+'A');
        }
        // 先整体翻转
        reverseArr(str, 0, n-1);
        // 此时每个单词也逆序了,需要根据空格将每个单元重新反转回去
        for(int i=0; i<n; i++) {
            if(str[i]==' ') continue;
            // 双指针,左指针的单词起始位置,右指针为单词末后一个位置
            int j=i;
            while(j<n && str[j]!=' ') j++;
            reverseArr(str, i, j-1); 
            i=j; // 更新左边界值
        }
        return new String(str);
    }
}

全部评论

相关推荐

评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务