反转字符串
代码:
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)进行进一步的学习。