一、字符串
1、字符串各种操作
知识点:
-
字符串拼接:str=str+s;
-
获取字符串子串:str . substring( index1 , index2);
-
字符串插入:
StringBuilder sb=new StringBuilder(); sb.append(str).insert(index, s);//在str字符串的index位置之后插入s字符串用StringBuilder的append和insert方法
-
获取字符串的位置:
str.indexOf(s)//获取s字符串在str字符串中第一次出现的位置下标
2、查找单词
代码:
package 洛谷基础题_字符串;
import java.util.Scanner;
public class P1308 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
s=s.toLowerCase();
String str=sc.nextLine();
str=str.toLowerCase();
String[]c=str.split(" ");
int count=0;
for(int i=0;i<c.length;i++) {
if(c[i].equals(s)) {
count++;
}
}
if(count==0) {
System.out.print(-1);
}else {
System.out.print(count+" "+(" "+str+" ").indexOf(" "+s+" "));
}
}
}
- 判断出现次数的时候要把字符串通过空格分割成单词数组,匹配加一。
- 判断第一次出现位置的时候不能直接用str .indexOf(s);,因为这样匹配到的第一个位置可能是另一个单词的一部分。如s=“he”,str=“she is a beautiful girl. he like her.” 这样第一个位置就是1而不是23。所以str和sq前后要加空格,这样表示一个单词。
3、P3741 honoka的键盘
代码
package 洛谷基础题_字符串;
import java.util.Arrays;
import java.util.Scanner;
public class P3741 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String str=sc.next();
char []c=str.toCharArray();
int count=0;
int num=0;
for(int i=0;i<n-1;i++) {
if(c[i]=='V'&&c[i+1]=='K') {
c[i]='X';
c[i+1]='X';
count++;
}
}
for(int i=0;i<n-1;i++) {
if((c[i]=='V'&&c[i+1]=='V')||(c[i]=='K'&&c[i+1]=='K')) {
num+=1;
}
}
System.out.println(num==0?count:count+1);
}
}
- 先统计出现 VK 的次数,然后统计有没有VV或者KK,但是要遍历一遍不,VK改成其他的字母(如VVKK,VK次数为1,有VV也有KK,最后统计次数为2,与实际不符)。如果有VV或者KK,则count+=1;
4、P1598 垂直柱状图
代码:
package 洛谷基础题_字符串;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class P1598 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] num=new int [26];//字母出现次数
int max=0;
StringBuilder sb=new StringBuilder();
for(int j=0;j<4;j++) {
String str=sc.nextLine();
char []c=str.toCharArray();
for(int i=0;i<c.length;i++) {
if(c[i]>='A'&&c[i]<='Z') {
num[c[i]-'A']++;
}
}
}
for(int i=0;i<num.length;i++) {
max=Math.max(max,num[i]);
}
for(int i=max;i>0;i--) {
for(int j=0;j<26;j++) {
if(num[j]>=i) {
sb.append("* ");
}else {
sb.append(" ");
}
}
sb.append("\n");
}
for(int i=0;i<num.length;i++) {
sb.append((char)(i+'A'));
sb.append(" ");
}
System.out.println(sb.toString());
}
}
-
拼串是非常耗时的,会超出指定的时间,所以可以用 StringBuilder的append方法,输出sb.toString();
-
把元素作为下标统计出现的个数、
-
求出最大的个数,如果某个字母大于等于最大个数就输出*,否则输出空格
-
int+char会转化成int,所以要强转为char