344.翻转字符串
双指针
class Solution {
public void reverseString(char[] s) {
int fir=0;
int sec=s.length-1;
char temp='\0';
while(fir<sec){
temp=s[fir];
s[fir]=s[sec];
s[sec]=temp;
fir++;
sec--;
}
}
}
XOR(异或)翻转
s[l] ^= s[r];
s[r] ^= s[l];
s[l] ^= s[r];
541.翻转字符串Ⅱ
class Solution {
public String reverseStr(String s, int k) {
char[] N = s.toCharArray();
for (int i = 0; i < N.length - 1; i += 2 * k) {
if (i + 2 * k - 1 <= N.length - 1) {
reverseString(N, i, i + k - 1);
} else if (i + k - 1 <= N.length - 1) {
reverseString(N, i, i + k - 1);
} else {
reverseString(N, i, N.length - 1);
}
}
return new String(N);
}
public void reverseString(char[] s, int fir, int sec) {
char temp = '\0';
while (fir < sec) {
temp = s[fir];
s[fir] = s[sec];
s[sec] = temp;
fir++;
sec--;
}
}
}
卡码网54. 替换数字
.nextLine获取字符串,.nextInt获取整数
StringBuilder创建可变长字符串 StringBuffer创建可变长线程安全数组,但是效率低
Character.isDigit()判断是否为数字,.charAt()获取字符串对应索引位置的char字符
import java.util.Scanner;
class Main{
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
StringBuilder res = new StringBuilder();
for (int i = 0;i < s.length() ; i++ ){
if(Character.isDigit(s.charAt(i))){
res.append("number");
}else{
res.append(s.charAt(i));
}
}
System.out.println(res);
}
}
151.翻转字符串中的单词
class Solution {
public String reverseWords(String s) {
StringBuilder res = removeSpace(s);
//去除多余空格
reverseString(res, 0, res.length() - 1);
//翻转整个字符串
reverseEachWord(res);
//翻转每一个单词
return res.toString();
}
public StringBuilder removeSpace(String res) {
int start = 0;
int end = res.length() - 1;
while (res.charAt(start) == ' ') start++;
while (res.charAt(end) == ' ') end--;
StringBuilder sb = new StringBuilder();
for (; start <= end; start++) {
if (res.charAt(start) != ' ' || sb.charAt(sb.length() - 1) != ' ') {
sb.append(res.charAt(start));
}
}
return sb;
}
public void reverseString(StringBuilder res, int start, int end) {
while (start < end) {
char temp = res.charAt(start);
res.setCharAt(start, res.charAt(end));
res.setCharAt(end, temp);
start++;
end--;
}
}
private void reverseEachWord(StringBuilder res) {
int start = 0;
int end = 1;
while (start < res.length()) {
while (end < res.length() && res.charAt(end) != ' ') {
end++;
}
reverseString(res, start, end - 1);
start = end + 1;
end = start + 1;
}
}
}
卡码网.右旋字符串
import java.util.Scanner;
class Main{
public static void main(String []args){
Scanner scan=new Scanner(System.in);
int k=Integer.parseInt(scan.nextLine());
String str=scan.nextLine();
int len=str.length();
char[] chars=str.toCharArray();
reverseString(chars,0,len-1);
reverseString(chars,0,k-1);
reverseString(chars,k,len-1);
System.out.println(chars);
}
public static void reverseString(char[] ch,int start,int end){
while(start<end){
ch[start]^=ch[end];
ch[end]^=ch[start];
ch[start]^=ch[end];
start++;
end--;
}
}
}