本文共 3678 字,大约阅读时间需要 12 分钟。
字符串旋转可以通过以下方法实现:
public class Solution { public void rotate(String s, int n) { int size = s.length(); n = n % size; if (n == 0) return; reverse(s, 0, n); reverse(s, n, size); reverse(s, 0, size); } private void reverse(String s, int start, int end) { int left = start; int right = end; while (left < right) { swap(s, left, right); left++; right--; } } private void swap(char[] array, int i, int j) { char temp = array[i]; array[i] = array[j]; array[j] = temp; }}
去除多余空格可以通过以下方法实现:
public class Solution { public String reverseWords(String s) { int len = s.length(); if (len == 0) { return ""; } int j = len - 1; StringBuilder res = new StringBuilder(); while (j >= 0) { if (s.charAt(j) == ' ') { j--; continue; } int pos = j; j++; while (j < len && s.charAt(j) != ' ') { res.append(s.charAt(j)); j++; } res.append(' '); j = pos; } if (res.length() > 0 && res.charAt(res.length() - 1) == ' ') { res.setLength(res.length() - 1); } return res.toString(); }}
字符串反转可以通过以下方法实现:
public class Solution { public String reverseStr(String s, int k) { int size = s.length(); if (size == 0 || k == 0) { return s; } k = k % size; if (k == 0) { return s; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < size; i++) { sb.append(s.charAt(size - 1 - i)); } return sb.toString(); }}
分词反转可以通过以下方法实现:
public class Solution { public String reverseWords(String s) { removeExtraSpaces(s); reverse(s, 0, s.length() - 1); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == ' ' && (i == 0 || s.charAt(i - 1) == ' ')) { reverse(s, i + 1, i); } } return s; } private void removeExtraSpaces(String s) { int len = s.length(); int j = 0; for (int i = 0; i < len; i++) { if (s.charAt(i) != ' ') { j++; s = s.substring(0, i + 1) + s.substring(i + 1); } } s = s.substring(0, j); } private void reverse(String s, int start, int end) { int left = start; int right = end; while (left < right) { swap(s, left, right); left++; right--; } } private void swap(char[] array, int i, int j) { char temp = array[i]; array[i] = array[j]; array[j] = temp; }}
分段反转可以通过以下方法实现:
public class Solution { public String reverseLeftWords(String s, int n) { reverse(s, 0, n); reverse(s, n, s.length()); reverse(s, 0, s.length()); return s; } private void reverse(String s, int start, int end) { int left = start; int right = end; while (left < right) { swap(s, left, right); left++; right--; } } private void swap(char[] array, int i, int j) { char temp = array[i]; array[i] = array[j]; array[j] = temp; }}
以上问题通过不同的方法实现了字符串反转的功能。每种方法都有其独特的思路和优缺点。选择哪种方法取决于具体的应用场景和性能需求。
转载地址:http://zkia.baihongyu.com/