字符串
//双指针交换首尾元素
public void reverseString(char[] s) {
int j = s.length - 1;
for (int i = 0; i < s.length / 2; i++) {
char temp = s[i];
s[i] = s[j];
s[j] = temp;
j--;
}
}
第二题:541. 反转字符串 II - 力扣(LeetCode)
public static String reverseStr(String s, int k) {
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i += 2 * k) {
int start = i;
//判断尾数够不够k个,取决于end指针的位置
int end = Math.min(chs.length - 1,start + k - 1);
while (start <end){
char temp = chs[start];
chs[start] = chs[end];
chs[end] = temp;
start++;
end--;
}
}
return String.valueOf(chs);
}
第三题:54. 替换数字(第八期模拟笔试) (kamacoder.com)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
StringBuilder sb = new StringBuilder(str);
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) >= '0' && sb.charAt(i) <= '9'){
sb.deleteCharAt(i);
sb.insert(i,"number");
i = i + 5;
}
}
System.out.println(String.valueOf(sb).toString());
}
}
第四题:151. 反转字符串中的单词 - 力扣(LeetCode)(困难)
public static String reverseWords(String s) {
// 1.去除首尾以及中间多余空格
StringBuilder sb = removeSpace(s);
//System.out.println(sb);
// 2.反转单词.以空格为界限,进行反转
String str = sb.toString();
String[] split = str.split(" ");
//双指针进行反转单词
int j = split.length - 1;
for (int i = 0; i < split.length / 2; i++, j--) {
String temp = split[i];
split[i] = split[j];
split[j] = temp;
}
//System.out.println(Arrays.toString(split));
StringBuilder s1 = new StringBuilder();
for (int i = 0; i < split.length; i++) {
if (i == split.length - 1){
s1.append(split[i]);
}else {
s1.append(split[i]).append(" ");
}
}
//将StringBuilder转为string
String result = s1.toString();
return result;
}
//双指针移除空格
private static StringBuilder removeSpace(String s) {
int start = 0;
int end = s.length() - 1;
//先移除首尾空格
while (s.charAt(start) == ' '){
start++;
}
while (s.charAt(end) == ' '){
end--;
}
StringBuilder sb = new StringBuilder();
while (start <= end){
char c = s.charAt(start);
if (c != ' ' || sb.charAt(sb.length() - 1) != ' '){ //本身不能为' ' 或者sb的最后一位不能是' '
sb.append(c);
}
start++;
}
return sb;
}
第五题:459. 重复的子字符串 - 力扣(LeetCode)
public boolean repeatedSubstringPattern(String s) {
StringBuilder sb = new StringBuilder();
//将字符串翻倍
sb.append(s).append(s);
//掐头去尾
String substring = sb.substring(1, sb.length() - 1);
//判断原来的字符串是否包含在substring中
boolean contains = substring.contains(s);
return contains;
}