文章目录
1.空格替换
1.1题目详述
题目链接:空格替换
1.2思路解析
遍历iniString
,将空格全部替换成 %20
。
1.3程序测试
class Replacement {
public String replaceSpace1(String iniString, int length) {
if (iniString == null || iniString.length() <= 0) {
return iniString;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
char c = iniString.charAt(i);
if (c == ' ') {
sb.append("%20");
} else{
sb.append(c);
}
}
return sb.toString();
}
}
}
2.删除公共字符
2.1题目详述
题目链接:删除公共字符
2.2思路解析
遍历第一个字符串,判断每个字符在第二个字符串中是否包含。
注意:删除时注意下标变化。
2.3程序测试
import java.util.Scanner;
public class Main{
public static String text(String s1 ,String s2){
StringBuilder stringBuilder = new StringBuilder(s1);
if(s1.length() == 0 || s2.length() == 0){
return s1;
}
int num = 0;
for(int i = 0; i < s1.length(); i++){ //遍历字符串1
String s = String.valueOf(s1.charAt(i));
System.out.println(i + ":" + s);
if(s2.contains(s)){
int index = i-num; //计算当前要删除字符下标
stringBuilder.deleteCharAt(index);
num ++;
}
}
return stringBuilder.toString();
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
System.out.println(text(s1,s2));
}
}
3.回文串:添加一个字母将其变为回文串
3.1题目详述
题目链接:回文串
3.2思路解析
添加一个字母将其变为回文串 ==》 减少任意一个字母如果可以构成回文串,那么它必定可以通过添加一个字母变成回文串。
3.3程序测试
import java.util.Scanner;
public class Main{
public static String myReserve(String s){
StringBuilder stringBuilder = new StringBuilder(s);
//System.out.println(stringBuilder); //注意:自身旋转 旋转之后值改变
if(stringBuilder.length() == 0 || stringBuilder.reverse().toString().equals(s)){
return "YES";
}else{
for(int i = 0;i<stringBuilder.length();i++){
StringBuilder str = new StringBuilder(s).deleteCharAt(i);
String s1 = str.toString(); //记录原串
if(str.reverse().toString().equals(s1)){
return "YES";
}
}
}
return "NO";
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String s = sc.next();
String result = myReserve(s);
System.out.println(result);
}
}
}
4.句子反转
4.1题目链接
4.2思路一
按空格分割,将 String[]
逆序遍历拼接。
注意:结果串的最后一个单词不用加空格。
import java.util.Scanner;
public class Main{
public static String reverse(String s){
if(s.length()== 0 || !s.contains(" ")){
return s;
}
String[] word = s.split(" ");
StringBuilder stringBuilder = new StringBuilder("");
for(int i = word.length-1; i >=0; i --){
if(i == 0){
stringBuilder.append(word[i]);
}else{
stringBuilder.append(word[i]).append(" ");
}
}
return stringBuilder.toString();
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println(reverse(s));
}
}
4.3思路二
先反转整体,再反转部分。
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNextLine()) {
String str = cin.nextLine();
System.out.println(reverseSentence(str));
}
}
//逆置函数
public static void reverse(char[] ch,int start,int end) {
while(start < end) {
char tmp=ch[start];
ch[start]=ch[end];
ch[end]=tmp;
start++;
end--;
}
}
//核心代码
public static String reverseSentence(String str) {
if(str == null) {
return null;
}
char[] ch = str.toCharArray();
//先对整体进行逆置
reverse(ch,0,str.length()-1);
int i = 0;
int j = 0;
//开始部分逆置,建议对着代码进行画图理解
while(i < ch.length) {
//都是空格,都进行++
if(ch[i] == ' ') {
i++;
j++;
}else if(j == ch.length || ch[j] == ' ' ) {//顺序不能反,否则会空指针异常
//逆置每个单词,这里是--j,j本身会发生移动
reverse(ch,i,--j);
i = ++j;
}else {
++j;
}
}
return String.copyValueOf(ch);
}
}