344 反转字符串
双指针交换
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while(right > left){
swap(s, left++, right--);
}
}
public void swap(char[] s, int left, int right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
}
}
异或用法
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while(right > left){
swap(s, left++, right--);
}
}
public void swap(char[] s, int left, int right){
s[left] ^= s[right];
s[right] ^= s[left];
s[left] ^= s[right];
}
}
541 反转字符串II
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0; i < ch.length; i+= 2 * k){
reverse(ch, i, Math.min(i + k - 1, ch.length - 1));
}
return new String(ch);
}
public void reverse(char[] s, int left, int right){
while(left < right){
s[left] ^= s[right];
s[right] ^= s[left];
s[left] ^= s[right];
left++;
right--;
}
}
}
卡码网:54.替换数字
链接:https://kamacoder.com/problempage.php?pid=1064
java只能用额外空间
import java.util.Scanner;
class Main{
public static String replaceStr(String str){
StringBuffer sb = new StringBuffer();
char[] ch = str.toCharArray();
for(int i = 0; i < ch.length; i++){
if(ch[i] >= '0' && ch[i] <= '9'){
sb.append("number");
}else{
sb.append(ch[i]);
}
}
return new String(sb);
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
String res = replaceStr(s);
System.out.println(res);
}
}
151.翻转字符串里的单词
字串整体反转再局部反转
class Solution {
public String reverseWords(String s) {
StringBuilder res = removeSpaceAndReverse(s);
reverseEachWord(res);
return res.toString();
}
public StringBuilder removeSpaceAndReverse(String s){
int start = 0;
int end = s.length() - 1;
while(s.charAt(start) == ' ') start++;
while(s.charAt(end) == ' ') end--;
StringBuilder sb = new StringBuilder();
for(int i = end; i >= start; i--){
sb.append(s.charAt(i));
if(s.charAt(i) == ' '){
while( s.charAt(i - 1) == ' '){
i--;
}
}
}
return sb;
}
public void reverseWord(StringBuilder sb, int left, int right){
while(left < right){
char temp = sb.charAt(left);
sb.setCharAt(left, sb.charAt(right));
sb.setCharAt(right, temp);
left++;
right--;
}
}
public void reverseEachWord(StringBuilder sb){
int left = 0;
int right = 0;
while(right <= sb.length()){
if(right == sb.length() || sb.charAt(right) == ' ' ){
reverseWord(sb, left, (right-1));
left = right + 1;
}
right++;
}
}
}
卡码网:55.右旋转字符串
先整体反转再局部反转;
import java.util.Scanner;
public class Main{
public static void main (String[] args) {
/* code */
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.next()) ;
String str = scanner.next();
StringBuffer sb = new StringBuffer();
int len = str.length();
for(int i = len - num; i < len; i++){
sb.append(str.charAt(i));
}
for(int i = 0; i < len - num; i++){
sb.append(str.charAt(i));
}
System.out.println(sb.toString());
}
}