1.翻转单词序列
public class Solution{
public String ReverseSentence(String str){
if(str==null||str.length()==0) return str;
char[] arr=str.toCharArray();
reverse(arr,0,arr.length-1);
int start=0;
int end=0;
while(start<arr.length){
if(arr[start]==' '){
start++;
end++;
}else if(end==arr.length||arr[end]==' '){
reverse(arr,start,end-1);
end++;
start=end;
}else{
end++;
}
}
return String.valueOf(arr);
}
private void reverse(char[] arr,int begin,int end){
while(begin<end){
char temp=arr[begin];
arr[begin]=arr[end];
arr[end]=temp;
begin++;
end--;
}
}
}
思路:1.判断字符串为空,字符串的长度为0,返回字符串。
2.把字符串数组转换成字符串。
3.在把字符串全部翻转一次。
4.如果字符串为空,就继续遍历。
5.如果最后一个字符串标记为end,并且下一个字符为空,即将这个单词翻转一次。
6.否则就继续往后遍历。
2.字符流中第一个不重复字符
public class Solution{
char[] chars=new char[256];
StringBuilder sb=new StringBuilder();
public void Insert(char ch){
sb.append(ch);
chars[ch]++;
}
public char FirstAppearingOnce(){
char[] str=ab.toString().toCharArray();
for(char c:str){
if(chars[c]==1){
return c;
}
}
return '#';
}
}
思路:1.创建字符数组的容量为256
2.在创建一个StringBuilder
3.把字符放进字符数组中
4.遍历字符串,并把字符串数组转换成字符串
5.字符串中出现一次的字符输出,否则输出#
3.表示数值的字符串
import java.util.*;
public class Solution{
public boolean isNumeric(String str){
if(str==null||str.length()==0) return false;
boolean num=false;
boolean dot=false;
boolean e=false;
char[] str1=str.trim().toCharArray();
for(int i=0;i<str1.length;i++){
if(str1[i]>='0'&&str1[i]<='9')
num=true;
else if(str1[i]=='.'){
if(dot||e)
return false;
dot=true;
}
else if(str1[i]=='e'||str1[i]=='E'){
if(e||!num)
return false;
e=true;
num=false;
}
else if(str1[i]=='+'||str1[i]=='-'){
if(1!=0&&str1[i-1]!='e'&&str1[i-1]!='E')
return false;
}
else{
return false;
}
}
return num;
}
}
思路:1. .之前不能有.e
2.e之前不能有e,必须有数字
3.+ - 第一个位置 或者e后面的第一个位置