java:比赛中常用方法整理——字符串(基础)

一.将字符串转化为字符数组:

  toCharArray返回一个字符数组。

char[] a=J.toCharArray();

二.字符串的长度

字符串的长度和字符数组的长度是不一'样'的.

字符串长度(字符串中的字符个数):

1 String J="HELLO";
2 J.length();

字符串的长度为5,且是一个方法length();


字符数组的长度:

String J="HELLO";
char a=J.toCharArray();
System.out.println(a.length);

字符数组需要获取长度,是访问一个对象length。

三.字符串的比较

我详细阅读了这篇文章,总结了一下:

1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 
他们之间的比较,应用双等号(==),比较的是他们的值。 


2.复合数据类型(类) 
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址。

所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

所以比较字符串是否相等时,要使用equlas方法。

String str1="Hello";
String str2="Hello";
str1.equals(str2);// return true

想看详细的文章地址如下:

(没总结的地方,包括重写equals方法,缓冲池中的String)

https://www.cnblogs.com/dongguol/p/5845076.html

四.遍历字符串

charAt(int index);// 返回指定索引处的 char 值。

返回指定索引处的 char 值。索引范围为从 0length() - 1。序列的第一个 char 值位于索引 0 处,第二个位于索引 1 处,依此类推,这类似于数组索引。 

五.将字符串转为大写或小写

toLowerCase(Locale locale) //使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

toUpperCase() //使用默认语言环境的规则将此 String 中的所有字符都转换为大写。          

可以做一做leetcode上的一道简单题:

https://leetcode-cn.com/problems/to-lower-case/

六.替换字符串的匹配的字串

replace(CharSequence target, CharSequence replacement) //使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。

replaceAll就不介绍了,区别在这篇文章有详细介绍:

https://blog.csdn.net/anmoyyh/article/details/70673812

掌握这个方法就可以快速做一下这道题:

461. 汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:
0 ≤ xy < 231.

示例:

输入: x = 1, y = 4

输出: 2

解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

上面的箭头指出了对应二进制位不同的位置。

我的解法:

1 class Solution {
2     public int hammingDistance(int x, int y) {
3         String str=Integer.toString(x^y,2);
4         return str.replace("0","").length();
5     }
6 }

以下为后期补充:

replaceFirst(String regex, String replacement) // 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

相比replace,这个方法只替代一个字符,学了这个可以做一下这个题。

389. 找不同

给定两个字符串 s 和 t,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例:

输入:
s = "abcd"
t = "abcde"

输出:
e

解释:
'e' 是那个被添加的字母。

我的解法:
1 class Solution {
2     public char findTheDifference(String s, String t) {
3         char[] a=s.toCharArray();
4         for(char i:a){
5           t = t.replaceFirst(String.valueOf(i),"");
6         }
7         return t.charAt(0);
8     }
9 }

简单但是时间和空间用的太多了,但是比赛中追求做题的速度了,有这点就够了。

运行速度更快的可以使用位运算和哈希表

七.字符串是否包含某些字符

contains(CharSequence s) //当且仅当此字符串包含指定的 char 值序列时,返回 true。

551. 学生出勤记录 I

给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:

  1. 'A' : Absent,缺勤
  2. 'L' : Late,迟到
  3. 'P' : Present,到场

如果一个学生的出勤记录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。

你需要根据这个学生的出勤记录判断他是否会被奖赏。

示例 1:

输入: "PPALLP"
输出: True

示例 2:

输入: "PPALLL"
输出: False

以下为我的解法:
 1 class Solution {
 2     public boolean checkRecord(String s) {
 3        int a=0;
 4         if(s.contains("LLL")){return false;}
 5         for(int i=0;i<s.length();i++){
 6             if(s.charAt(i)=='A'){
 7                 a++;
 8             }
 9             if(a>1){return false;}
10         }
11         return true;
12         
13     }
14 }

当然有时候需要返回字串在字符串里面出现得第一个索引位置:

 int indexOf(int ch) //返回指定字符在此字符串中第一次出现处的索引。 
 int indexOf(int ch, int fromIndex) //返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 
 int indexOf(String str) //返回指定子字符串在此字符串中第一次出现处的索引。 
 int indexOf(String str, int fromIndex)   // 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 

以下例题使用这个方法十分方便:

28. 实现strStr()

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2

示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

对于这道题原本的意思是使用kMP算法,但是系统封装好的方法,直接调用:

1 class Solution {
2     public int strStr(String haystack, String needle) {
3         return haystack.indexOf(needle);
4     }
5 }