最后一个单词的长度
- 给定一个字符串, 包含大小写字母、空格’ ‘,请返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0
public class Solution {
/**
* @param s A string
* @return the length of last word
*/
public int lengthOfLastWord(String s) {
// Write your code here
String[] s1 = s.split(" ");
return s1[s1.length-1].length();
}
}
给一个词典,找出其中所有最长的单词
样例
在词典
{
“dog”,
“google”,
“facebook”,
“internationalization”,
“blabla”
}
中, 最长的单词集合为 [“internationalization”]在词典
{
“like”,
“love”,
“hate”,
“yes”
}
中,最长的单词集合为 [“like”, “love”, “hate”]
class Solution {
/**
* @param dictionary: an array of strings
* @return: an arraylist of strings
*/
ArrayList<String> longestWords(String[] dictionary) {
// write your code here
if(dictionary.length == 0){
return null;
}
ArrayList<String> result = new ArrayList<String>();
result.add(dictionary[0]);
for(int i = 1; i < dictionary.length; i++){
String temp = dictionary[i];
if(temp.length() > result.get(0).length()){
result.clear();
result.add(temp);
}else if( temp.length() == result.get(0).length()){
result.add(temp);
}
}
return result;
}
};
---
有效回文串
给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
注意事项
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文
样例
“A man, a plan, a canal: Panama” 是一个回文。”race a car” 不是一个回文。
/**
* @param s A string
* @return Whether the string is a valid palindrome
*/
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0) {
return true;
}
s = s.toLowerCase();
int left = 0;
int right = s.length() - 1;
while(left < right){
while(left < s.length() && !isValid(s.charAt(left))){// nead to check range of a/b
left++;
}
if(left == s.length()){// for emtpy string “.,,,”
return true;
}s
while(right >= 0 && !isValid(s.charAt(right))){
right--;
}
if(Character.toLowerCase(s.charAt(left)) == Character.toLowerCase(s.charAt(right))){
right--;
left++;
}else{
break;
}
}
return right <= left;
}
/**
* 是否为有效
*/
private boolean isValid(char c){
return Character.isLetter(c) || Character.isDigit(c);
}
二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)
样例
a = 11
b = 1
返回 100
public class Solution {
/**
* @param a a number
* @param b a number
* @return the result
*/
//如果超过 long 长度则gg
private static String addBinary(String a, String b) {
long x = Long.valueOf(a, 2);
long y = Long.valueOf(b, 2);
long z = x + y;
String binaryString = Long.toBinaryString(z);
return binaryString;
}
public String addBinary(String a, String b) {
// Write your code here
if(a.length() < b.length()){
String tmp = a;
a = b;
b = tmp;
}
int pa = a.length()-1;
int pb = b.length()-1;
int carries = 0;
String rst = "";
while(pb >= 0){
int sum = (int)(a.charAt(pa) - '0') + (int)(b.charAt(pb) - '0') + carries;
rst = String.valueOf(sum % 2) + rst;
carries = sum / 2;
pa --;
pb --;
}
while(pa >= 0){
int sum = (int)(a.charAt(pa) - '0') + carries;
rst = String.valueOf(sum % 2) + rst;
carries = sum / 2;
pa --;
}
if (carries == 1)
rst = "1" + rst;
return rst;
}
}
查找字符串
- 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。
说明
在面试中我是否需要实现KMP算法?
不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。
样例
如果 source = “source” 和 target = “target”,返回 -1。
如果 source = “abcdabcdefg” 和 target = “bcd”,返回 1。
//暴力
if(source==null||target==null)
{
return -1;
}
int sl = source.length();
int tl = target.length();
int i = 0;
int j = 0;
while(i<sl&&j<tl)
{
if (source.charAt(i) == target.charAt(j)) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
}
if(j==tl)
{
return i - j;
}else
{
return -1;
}
//KMP ..不会