赞
踩
跟之前的反转字符串一样使用双指针,外层循环以2k为单位,并对于最后一段进行长度处理
- class Solution {
- public String reverseStr(String s, int k) {
- char[] str = s.toCharArray();
- for (int i = 0; i < str.length; i += 2*k ){
- int left = i, right = i+k-1;
- if (right > str.length-1) right = str.length-1;
- while(left < right) {
- char temp = str[left];
- str[left] = str[right];
- str[right] = temp;
- left++ ;
- right--;
- }
- }
- return new String(str);
- }
- }

不考虑空间复杂度就是新生题,Java注意StringBuilder才能修改,String在常量池不能改
判断是否为数字用Character.isDigit(s.charAt(i))
如果题目在力扣上输入类型可改变,可以用双指针原地扩容
- import java.util.Scanner;
-
- class Main {
- public static void main(String[] args) {
- Scanner in = new Scanner(System.in);
- String s = in.nextLine();
- StringBuilder sb = new StringBuilder();
- for (int i = 0 ; i < s.length(); i++) {
- if (Character.isDigit(s.charAt(i))) {
- sb.append("number");
- } else {
- sb.append(s.charAt(i));
- }
- }
- System.out.println(sb);
- }
- }

这里我主要用的Java内置方法
String提供去除首位空格的trim方法和进行分割的split方法,StringBuilder提供reverse方法
中间用到\s+匹配一个或多个空格
- class Solution {
- public String reverseWords(String s) {
- String s0 = s.trim();
- String[] arr = s0.split("\\s+");
- StringBuilder sb = new StringBuilder();
- for (String i : arr) {
- StringBuilder rev = new StringBuilder(i);
- sb.append(rev.reverse()).append(" ");
- }
- return sb.reverse().toString().trim();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。