反转字符串
代码:
public void reverseString(char[] s) {
char temp;
int length=s.length;
//注意i<length/2,即只需两边交换即可
for(int i=0;i<length/2;i++){
temp=s[i];
s[i]=s[length-1-i];
s[length-1-i]=temp;
}
}
整数反转
代码:
public int reverse(int x) {
//判断有没有负号
int flag = x > 0 ? 1 : -1;
//把符号提出来
x = Math.abs(x);
try {
//将字符串转化之后乘以flag,即还原符号
return Integer.valueOf(new StringBuffer(String.valueOf(x)).reverse().toString()) * flag;
} catch (NumberFormatException e) {
return 0;
}
}
字符串的第一个唯一字符
代码:
public int firstUniqChar(String s) {
for (int i = 0; i < s.length(); i++) {
char t = s.charAt(i);
//当第一次出现该字符的索引和最后一次出现该字符的索引一致,说明该字符只有一个
if (s.indexOf(t)==s.lastIndexOf(t)){
return i;
}
}
//如果上面没有返回,说明字符串的长度为0,或者每一个字符都有重复
return -1;
}
有效的字母异位词
代码:
public boolean isAnagram(String s, String t) {
//若长度不相同,肯定使false
if (s.length() != t.length()) {
return false;
}
char[] sCharArr = s.toCharArray();
char[] tCharArr = t.toCharArray();
//数组的下表可以用字符来表示,因为后期会被自动转化为合适的索引
//其实字符可以通过ASCII编码表转换为数字,而标准ASCII码字符集总共的编码有128个,所以声明数组的长度为128
int[] temp = new int[128];
for (char c : sCharArr) {
temp[c]++;
}
for (char c : tCharArr) {
temp[c]--;
}
for (int i = 0; i < temp.length; i++) {
if (temp[i] != 0) {
return false;
}
}
return true;
}
验证回文串
代码:
public boolean isPalindrome(String s) {
if (s.length() == 0) {
return true;
}
//先将字符串的所有字母转化为小写
s = s.toLowerCase();
for (int i = 0, j = s.length() - 1;i < j; i++, j--) {
//跳过不是数字和字母的其他字符
while (i < j && !Character.isLetterOrDigit(s.charAt(i))) {
i++;
}
//跳过不是数字和字母的其他字符
while (i < j && !Character.isLetterOrDigit(s.charAt(j))) {
j--;
}
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}
字符串转换整数 (atoi)
代码:
public int myAtoi(String s) {
if (s.length() == 0) {
return 0;
}
char[] sCharArr = s.toCharArray();
int index = 0;
//读入字符串并丢弃无用的前导空格
//跳过空格
while (index<sCharArr.length&&sCharArr[index] == ' ') {
index++;
}
// 字符串为全空格
if (index == sCharArr.length) {
return 0;
}
//检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
int flag = 1;
//如果该字符为'-','+',index++
if (sCharArr[index] == '-' || sCharArr[index] == '+') {
if (sCharArr[index++] == '-') {
flag = -1;
}
}
//读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
String tempStr = "";
while (index < sCharArr.length) {
if (sCharArr[index] < '0' || sCharArr[index] > '9') {
break;
} else {
tempStr += sCharArr[index];
}
index++;
}
//将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
//如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
//返回整数作为最终结果。
if (tempStr.equals("")){
return 0;
}
try{
return Integer.valueOf(tempStr)*flag;
} catch (NumberFormatException e) {
return flag==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
}
}
由于小编如今面临苦逼的期末考试,先暂时更新一部分,感兴趣的同学可以上初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com)进行进一步的学习。