题目可以在LeetCode查看
1. 反转字符串
用时:3ms
class Solution {
public String reverseString(String s) {
// 用时:4ms
// StringBuilder sb=new StringBuilder();
// for(int i=s.length()-1;i>=0;--i){
// sb.append(s.charAt(i));
// }
// return sb.toString();
return new StringBuilder(s).reverse().toString();
}
}
2. 颠倒整数
用时:31ms
class Solution {
public int reverse(int x) {
boolean negative = x < 0;
if (negative){
x = -x;
}
long r = 0;
while (x>0) {
r = r * 10 + x % 10;
x /= 10;
}
if (negative){
r = -r;
}
if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE){
return 0;
}
return (int)r;
}
}
3. 字符串中的第一个唯一字符
用时:43ms
class Solution {
public int firstUniqChar(String s) {
int len=s.length();
HashSet<Character> repeat=new HashSet<>();
Character temp;
boolean find=false;
// 一个一个比较如果不重复则找到
for(int i=0;i<len;++i){
temp=s.charAt(i);
if(!repeat.contains(temp)){
find=true;
for(int j=i+1;j<len;++j){
if(temp.equals(s.charAt(j))){
find=false;
break;
}
}
}
if(find){
return i;
}else{
repeat.add(temp);
}
}
return -1;
}
}
4. 有效的字母异位词
用时:9ms
class Solution {
public boolean isAnagram(String s, String t) {
int len=s.length();
if(len!=t.length()){
return false;
}
// s有某字母则加1,t有则减一,最终都为0
int[] words=new int[26];
for(int i=0;i<len;++i){
++words[s.charAt(i)-97];
--words[t.charAt(i)-97];
}
for(int i:words){
if(i!=0){
return false;
}
}
return true;
}
}
5. 验证回文字符串
用时:31ms
class Solution {
public boolean isPalindrome(String s) {
// 只留下字母和数字
s=s.replaceAll("[^a-zA-Z0-9]","");
// 忽略大小写比较
StringBuilder reverse=new StringBuilder(s).reverse();
if(s.equalsIgnoreCase(reverse.toString())){
return true;
}
return false;
}
}
6. 字符串转整数(atoi)
用时:30ms
class Solution {
public int myAtoi(String str) {
int len=str.length();
// 找到第一个非空格
int i=0;
while(i<len&&str.charAt(i)==' '){
++i;
}
// 如果i溢出则为空串或空格
if(i==len){
return 0;
}
// 判断第一个字符是正负号、非数字
char temp=str.charAt(i);
boolean neg=false;
if(temp=='-'||temp=='+'){
neg=(temp=='-'?true:neg);
++i;
}else if(temp<48&&temp>57){
return 0;
}
// 正负号是末尾字符
if(i==len){
return 0;
}
// 将数字提取出来
StringBuilder numStr=new StringBuilder();
temp=str.charAt(i);
while(temp>=48&&temp<=57){
numStr.append(temp);
if(++i>=len){
break;
}
temp=str.charAt(i);
}
// 去除前面的0
while(numStr.length()!=0&&numStr.charAt(0)=='0'){
numStr.deleteCharAt(0);
}
// 如果为空串
if(numStr.length()==0){
return 0;
}
// 如果长度太长则直接返回最值
if(numStr.length()>=11){
if(neg){
return Integer.MIN_VALUE;
}
return Integer.MAX_VALUE;
}
// 转为long
Long num=Long.valueOf(numStr.toString());
if(neg){
num=-num;
}
if(num<Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}else if(num>Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}
return num.intValue();
}
}
7. 实现strStr()
用时:5ms
class Solution {
public int strStr(String haystack, String needle) {
int len1=haystack.length(),len2=needle.length();
if(len2==0){
return 0;
}
int i=0;
char first=needle.charAt(0);
// 直接比较子串
while(i<=(len1-len2)){
if(needle.equals(haystack.substring(i,len2+i))){
return i;
}
++i;
}
return -1;
}
}
8. 数数并说
用时:5ms
class Solution {
// 保存上一次的序列和n,用于直接从这一次开始
public static StringBuilder startsb=new StringBuilder("1");
public static int startn=1;
public String countAndSay(int n) {
StringBuilder presb=new StringBuilder("1");
StringBuilder cursb=new StringBuilder();
int i=0;
// 如果n大于上一次的n,则可以直接从上一次开始
if(n>=startn){
presb.replace(0,presb.length(),startsb.toString());
i=startn-1;
}
// 统计字符及其个数
int count;
char num;
while(i<n-1){
for(int m=0;m<presb.length();m+=count){
num=presb.charAt(m);
count=1;
for(int j=m+1;j<presb.length();++j){
if(num==presb.charAt(j)){
++count;
}else{
break;
}
}
cursb.append(String.valueOf(count));
cursb.append(num);
}
presb.replace(0,presb.length(),cursb.toString());
cursb.delete(0,cursb.length());
++i;
}
if(n>startn){
startsb.replace(0,startsb.length(),presb.toString());
startn=n;
}
return presb.toString();
}
}
9. 最长公共前缀
用时:9ms
class Solution {
public String longestCommonPrefix(String[] strs) {
int len1=strs.length;
if(len1==0){
return "";
}
int len2=strs[0].length();
int count=0;
char temp;
boolean find;
for(int i=0;i<len2;++i){
temp=strs[0].charAt(i);
find=true;
for(int j=1;j<len1;++j){
try{
if(temp!=strs[j].charAt(i)){
find=false;
break;
}
}catch(Exception e){
find=false;
break;
}
}
if(!find){
break;
}
++count;
}
return strs[0].substring(0,count);
}
}